18

我遇到了一些带有“?”的scala代码 但不知道在scala中是什么意思,谁能给我解释一下?谢谢。

这是一个例子

 def getJobId(conf: Configuration): String =
    ?(conf.get("scoobi.jobid")).getOrElse(sys.error("Scoobi job id not set."))
4

2 回答 2

30

对我来说,它看起来像 Option 的 apply 方法。代码中是否有以下导入语句:

import Option.{apply => ?}

这意味着apply被导入为? . 来自 Option.apply 的文档:

一个选项工厂,如果参数不为空,则创建 Some(x),如果为空,则创建
None。

整个陈述意味着:

如果 conf.get("scoobi.jobid") 不等于 null,则分配此字符串,否则分配字符串 sys.error("Scoobi job id not set.") 返回

于 2012-04-06T08:29:02.277 回答
8

它只是一个合法字符,就像“abcd...”

scala> def ?(i: Int) = i > 2
$qmark: (i: Int)Boolean

scala> val a_? = ?(3)
a_?: Boolean = true

UPD:请参阅Scala 中的有效标识符字符Scala 方法和值名称

UPD2:在示例中“?” 可以是函数、方法this或只是一些带有apply方法的对象。它可能会返回Option[String]

于 2012-04-06T07:01:40.403 回答