Option
オブジェクトを開始する 2 つの方法の長所と短所は何ですか。
1.
def getAmount: Option[Int] = {
val a: Int = 1
Option(a)
}
2.
def getAmount: Option[Int] = {
val a: Int = 1
Some(a)
}
どちらを使用する必要がありますか?
Option
オブジェクトを開始する 2 つの方法の長所と短所は何ですか。
1.
def getAmount: Option[Int] = {
val a: Int = 1
Option(a)
}
2.
def getAmount: Option[Int] = {
val a: Int = 1
Some(a)
}
どちらを使用する必要がありますか?
私にとっては、それは単なる常識の問題です。もちろん、タイプ Some および None が許可されていないことを期待するケースを想像できます。しかし、通常は 2 番目の方法の方がはるかに自然に見えます。戻り値の型は Option で、実際の実装は Some(x) または None です。技術的には、ソース コードから、 Option(x) はapply()
コンパニオン オブジェクトのメソッドを呼び出します。
object Option {
import scala.language.implicitConversions
implicit def option2Iterable[A](xo: Option[A]): Iterable[A] = xo.toList
def apply[A](x: A): Option[A] = if (x == null) None else Some(x)
def empty[A] : Option[A] = None
}
そして Some(a) はapply()
ケースクラスのメソッドを呼び出します..
final case class Some[+A](x: A) extends Option[A] {
def isEmpty = false
def get = x
}
他のすべての方法は同じです。オブジェクトの使用例は、 Travis Brownの回答null
でよく説明されています。