32

私は scala (2.1) の play を使用しており、"Option[Long]" 値を "Long" に変換する必要があります。

私は反対のことをする方法を知っています、つまり:

  def toOption[Long](value: Long): Option[Long] = if (value == null) None else Some(value)

しかし、私の場合、"Option[Long]" の値を型として "Long" を取るメソッドに渡す必要があります。助けてください。

4

6 に答える 6

59

Option[Long] に x を指定すると、 x.getLong が返されます。

于 2014-05-19T09:05:31.233 に答える
11

このメソッドは Option[A] で既に定義されており、 getと呼ばれます。

scala> val x = Some(99L)
x: Some[Long] = Some(99)

scala> x.get
res0: Long = 99

問題は、None で get を呼び出すと、NoSucheElement 例外がスローされることです。

scala> None.get
java.util.NoSuchElementException: None.get

したがって、Option タイプを使用してもメリットはありません。

したがって、前に述べたように、適切なデフォルト値を提供するか、例外を処理できる場合は、getOrElseを使用できます。

慣用的なscalaの方法は、mapまたはfor-comprehensionを使用することです

x map (_ + 1)
res2: Option[Long] = Some(100)

また

for (i <- x) yield i +1
res3: Option[Long] = Some(100)
于 2013-11-04T13:33:17.530 に答える
1

オプションが の場合に何が起こるかを決定する必要がありますNone。デフォルト値を指定しますか?

def unroll(opt: Option[Long]): Long = opt getOrElse -1L  // -1 if undefined

unroll(None) // -> -1

例外をスローすることもできます。

def unroll(opt: Option[Long]): Long = opt.getOrElse(throw 
  new IllegalArgumentException("The option is expected to be defined at this point")
)

unroll(None) // -> exception

nullその場合は、使用するよほどの理由がない限り、使用を控えてください ( opt.orNull)。

于 2013-11-04T10:37:14.187 に答える