scala中的get方法有什么作用?

时间:2014-07-29 13:14:50

标签: scala

post("/api/v1/multi_preview/create"){
    val html = getParam("html").get
    val subject = getParam("subject").get
 }

我想知道.get方法在scala中的作用。 getParam()已经将参数返回到post hit。我知道.get会使它更容易,因为我们没有“匹配”来检查空值,因为它会在前一种情况下自动抛出异常。 还有更多的东西比满足眼睛吗?

2 个答案:

答案 0 :(得分:11)

它通常是选项上的一个功能(即Some或None)。如果存在,它会获取包含的元素,否则会抛出NoSuchElementException。

http://www.scala-lang.org/api/current/index.html#scala.Option

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,或继续通过高阶函数使用您的Option值,例如mapfilterfoldreduce等。< / p>

以下是一个如何使用它的例子:

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

如果你没有触摸&#34;你可以假装总是指定值。直接。

答案 1 :(得分:2)

我认为这是一些Scalatra相关代码,如果是这样的话,getParam会返回OptionOption是一个包装类型的包装器,允许您避免检查null(以及其他类型的实用程序),实际上包含在Option中的值可以是{ {1}},在这种情况下,您可以使用get来访问该值,例如

Some

或者可以是val someString = Option("some text") println(someString.get) // prints "some text" ,在这种情况下,当您调用None时会收到异常,值为getSome可通过参数匹配确定< / p>

None

或使用someOption match { case Some(value) => doSomething(value) case None => doSomethingElse() } 如果isDefined则返回true,如果Some则返回false。

请注意,您的代码可能会抛出异常,因为您在不知道它是None还是get的情况下调用Some,您应该使用返回值的None如果存在任何或默认指定参数,则选项成立:

getOrElse