get方法在scala中做什么?

get方法在scala中做什么?,scala,Scala,我想知道.get方法在scala中到底做了什么。getParam()已将参数返回到命中后。我知道。get将使它更容易,因为我们不必“匹配”来检查空值,因为在前一种情况下,它会自动抛出异常。 它有没有比看上去更多的功能?它通常是一个选项功能(即部分或无)。它将获取包含的元素(如果它存在),否则它将抛出NosTouchElementException 作为补充说明,您应该尽量避免使用get,因为它会让您回到空指针异常的领域。相反,请尝试使用getOrElse,或通过更高阶的函数继续使用选项值,如m

我想知道.get方法在scala中到底做了什么。getParam()已将参数返回到命中后。我知道。get将使它更容易,因为我们不必“匹配”来检查空值,因为在前一种情况下,它会自动抛出异常。
它有没有比看上去更多的功能?

它通常是一个选项功能(即部分或无)。它将获取包含的元素(如果它存在),否则它将抛出NosTouchElementException

作为补充说明,您应该尽量避免使用
get
,因为它会让您回到空指针异常的领域。相反,请尝试使用
getOrElse
,或通过更高阶的函数继续使用选项值,如
map
filter
fold
reduce

以下是一个示例,说明如何利用它为您带来优势:

scala> val x:Option[Int] = Some(42)
x: Option[Int] = Some(42)

scala> x.get
res2: Int = 42

scala> None.get
java.util.NoSuchElementException: None.get
  at scala.None$.get(Option.scala:322)
  ... 32 elided

如果不直接“触摸”它,您可以假装总是指定该值。

我想这是一些与Scalatra相关的代码,如果是这样,
getParam
返回一个
Option
s是一种围绕类型的包装器,允许您避免检查
null
s(以及其他类型的实用程序),事实上
选项中包装的值可以是
Some
,在这种情况下,您可以使用get访问该值,例如

scala> def foo(opt:Option[Int]) = opt map (_+2) filter (_%2 == 0) map (_+1)
foo: (opt: Option[Int])Option[Int]

scala> foo(Some(40))
res4: Option[Int] = Some(43)

scala> foo(Some(41))
res5: Option[Int] = None

scala> foo(None)
res6: Option[Int] = None
或者可以是
None
,在这种情况下,当调用
get
时,您会得到一个异常,可以通过参数匹配确定值是
Some
还是
None

val someString = Option("some text")
println(someString.get) // prints "some text"
或者使用
isDefined
,如果是
Some
,则返回true;如果是
None
,则返回false

请注意,由于调用
get
而不知道它是
Some
还是
None
,您的代码可能会引发异常,因此应该使用
getOrElse
,如果有,它会返回选项保留的值,或者返回默认的指定参数:

someOption match {
   case Some(value) => doSomething(value)
   case None => doSomethingElse()
}

我认为你应该认真考虑如果运行时异常对你的应用程序来说是可以接受的。选项类型有助于使容错代码更容易实现。鉴于对这个问题的所有反对票,我建议选择“Scala编程,第二版”,因为这是一个非常基本的概念。
someOption match {
   case Some(value) => doSomething(value)
   case None => doSomethingElse()
}
val someNone = Option(null)
println(someNone.getOrElse("some default")) // prints "some default"