【问题标题】:What does a "?" symbol (question mark) mean in Scala?什么是“?” Scala中的符号(问号)是什么意思?
【发布时间】:2012-04-19 21:04:18
【问题描述】:

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

这是一个例子

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

【问题讨论】:

  • 你能举个例子吗?这 ”?”可以是方法名、类名或其他名称的一部分。它不是 Scala 中的标准运算符。
  • val lovely_? = isItAGoodDay()
  • 是我还是“?”在这种情况下,辅助方法完全没有意义吗?使用标准 conf.get("foo") getOrElse sys.error("bar") 获得相同的结果,字符更少,恕我直言,更清晰
  • @virtualeyes Option.apply(x) 将 null 转换为 None。因此,如果conf.get("foo") 没有返回Option,但可能返回null,那么这样做是为了将可能的null 转换为None(参见Christian 的回答)。
  • 假设在这种情况下 get 是在一个选项上,但再看一遍,情况并非如此。顺便说一句,“import Option.{apply => ?}”真的很棒;-)

标签: scala syntax


【解决方案1】:

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

import Option.{apply => ?}

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

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

整个语句的意思是:

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

【讨论】:

  • 谢谢,你是对的。前面有一个导入语句“import Option.{apply => ?}”
【解决方案2】:

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

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

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

UPD:见Valid identifier characters in Scala,Scala method and values names

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

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 1970-01-01
    • 2010-09-29
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多