繁体   English   中英

get方法在scala中做了什么?

[英]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 上的一个函数(即SomeNone )。 如果它存在,它会为您获取包含的元素,否则它会抛出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 ,或通过mapfilterfoldreduce等高阶函数继续使用您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM