[英]What does the get method do in scala?
post("/api/v1/multi_preview/create"){
val html = getParam("html").get
val subject = getParam("subject").get
}
我想知道 .get 方法在 scala 中究竟做了什么。 getParam() 已经将参数返回给 post hit 。 我知道 .get 会更容易,因为我们不必“匹配”来检查空值,因为它会在前一种情况下自动抛出异常。 它还有比眼前所见更多的东西吗?
它通常是Option
s 上的一个函数(即Some
或None
)。 如果它存在,它会为您获取包含的元素,否则它会抛出NoSuchElementException
。
https://www.scala-lang.org/api/current/scala/Option.html
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
附带说明一下,您应该尽量避免使用get
,因为它会让您回到空指针异常的境地。 相反,请尝试使用getOrElse
,或通过map
、 filter
、 fold
、 reduce
等高阶函数继续使用您的Option
值。
这是一个如何利用它来发挥自己优势的示例:
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
如果您不直接“触摸”它,您可以假装始终指定该值。
我想这是一些Scalatra
相关的代码,如果是这样, getParam
返回一个Option 。 Option
s 是类型的包装器,允许您避免检查null
s(以及其他类型的实用程序),实际上包装在Option
中的值可以是Some
,在这种情况下,您可以使用 get 访问该值,例如
val someString = Option("some text")
println(someString.get) // prints "some text"
或者可以是None
在这种情况下调用get
你会得到一个异常,值是Some
还是None
可以通过参数匹配来确定
someOption match {
case Some(value) => doSomething(value)
case None => doSomethingElse()
}
或者使用isDefined
如果是Some
则返回 true ,如果是None
则返回 false 。
请注意,您的代码可能会抛出异常,因为您在不知道它是Some
还是None
的情况下调用get
,您应该使用getOrElse
它返回 Option 保存的值(如果有)或默认指定参数:
val someNone = Option(null)
println(someNone.getOrElse("some default")) // prints "some default"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.