3

私が理解しているようにnull、Scala での使用は避けるべきです。また、一部のフィールドが「値なし」を持つことが論理的に有効でない場合は、 s の使いOptionすぎを避けるために使用しないでくださいOption

それでは、コードを見てみましょう。授業がある

case class User (name: String)

nameそして、フィールドが であってはならないことnullを100% 確信していStringますOption[String]

問題は、一部の標準 Scala メソッドが me に返されることですOption。(私の場合、IterableLike#findメソッドは Option を返します)

問題は、ラップされUserたときにインスタンスを作成する方法です。少し明確にするために、これはコードです:nameOption

val userName: Option[String] = myList.find(...)
val user = User(userName.get) // or may be I should use userName.orNull ? or throw exception?

Option.getそれはエレガントな解決策ではないと聞きました。orNull方法は とほぼ同じgetです。

4

2 に答える 2

9

あなたはにマップしOption[String]たいOption[User]

val userName: Option[String] = myList.find(...)
val user: Option[User] = userName.map(n => User(n))
于 2015-04-16T19:12:12.370 に答える
4

orNull主に Java の相互運用性のために提供されます。null多くの Java ライブラリでセンチネル値として を使用することは広く普及しorNullており、構文糖衣の小さな部分として機能します。本質的にmyOption.getOrElse(null)は、わずかにクリーンなコードを可能にする関数名が付いています。

純粋な Scala プロジェクトで を使用するのorNullは、控えめに言っても奇妙です。

于 2015-04-16T20:13:16.430 に答える