-2

可能重复:
为什么 Option[T] ?

我的项目有问题

如何从值中检索数据:[some (test)] 并且只取 ​​(test) 的值。并使用get方法?

或者

我如何改变值的形式:[some (test)] to "test" just

4

1 回答 1

3

基本上,永远不要使用 get() 。没有任何情况下它是比替代品更好的选择。选项是在类型系统中指示函数可能不会返回您想要的内容的一种方式。您可能会将其视为包含 0 或 1 个事物的集合。

查看API 文档,其中显示了处理选项的几种不同方法;作为使用 map/flatMap、getOrElse 的集合,用于理解和模式匹配。

例如地图:

val maybeData : Option[String] = Some("test")  // or None
val maybeResult = maybeData.map(x : String => doSomethingWithAString(x))

如果 MaybeData 为 None,则什么也不会发生。如果是 Some(),您将返回一个包含 doSomethingWithAString() 结果的选项。请注意,这将是 Option[B],其中 B 是 doSomethingWithAString 的返回类型。

例如getOrElse:

val maybeData : Option[String] = Some("test")  // or None
val result : String = maybeData.getOrElse("N/A")

如果 data 为 Some,则结果为“test”,否则为“N/A”。

例如模式匹配:

val maybeData : Option[String] = Some("test")  // or None
val result : String = maybeData match {
  case Some(x) => doSomethingWithAString(x)
  case None => "N/A"
}

你得到了图片(注意这假设 doSomethingWithAString 返回字符串)。

如果你使用 get() 并且可能数据为 None,你会得到处理空指针等价物的乐趣。没有人想要那样。

于 2012-08-10T21:03:12.520 回答