3

据我了解,我们应该避免null在 Scala 中使用。如果某些字段在逻辑上不具有“无值”,那么我们不应该使用Option以避免过度使用Options。

所以让我们看看代码。我有课

case class User (name: String)

而且我 100% 确定该name字段不能null,因此我只使用StringOption[String].

问题是一些标准的 Scala 方法返回给我Option。(在我的情况下,该IterableLike#find方法返回选项)

所以问题是我如何Username包装后创建实例Option?稍微清楚一点,这是代码:

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)带有一个允许代码更简洁的函数名。

orNull在纯 Scala 项目中使用 至少可以说是奇怪的。

于 2015-04-16T20:13:16.430 回答