8

Optionオブジェクトを開始する 2 つの方法の長所と短所は何ですか。

1.

def getAmount: Option[Int] = {
  val a: Int = 1
  Option(a)
}

2.

def getAmount: Option[Int] = {
  val a: Int = 1
  Some(a)
}

どちらを使用する必要がありますか?

4

2 に答える 2

0

私にとっては、それは単なる常識の問題です。もちろん、タイプ 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でよく説明されています。

于 2015-04-11T15:34:23.847 に答える