2012-04-06 88 views
11

我遇到一些帶「?」的scala代碼但不知道scala中的含義,有誰能解釋一下嗎?謝謝。什麼是「?」符號(問號)是否意味着在斯卡拉?

下面是一個例子

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

你能舉個例子嗎? 「?」可以是方法名稱,類名稱或其他內容的一部分。它不是Scala中的標準操作符。 – Jesper 2012-04-06 06:58:32

+0

'val lovely_? = isItAGoodDay()'< - 那樣? – 2012-04-06 07:01:03

+0

只是我還是「?」這種情況下的幫助方法完全沒有意義?使用標準conf.get(「foo」)getOrElse sys.error(「bar」)獲得相同的結果,使用更少的字符和恕我直言,更清晰, – virtualeyes 2012-04-06 09:42:07

回答

25

對我來說,它看起來像Option的apply方法。有沒有什麼地方在代碼中下面的import語句:

import Option.{apply => ?} 

這意味着適用導入爲。從Option.apply的DOC:

一個選項的工廠,產生了一些(x)如果該參數不爲null,
和無,如果它是空的。

整個聲明則表示:

如果conf.get( 「scoobi.jobid」)不等於空,指定這個字符串, 以其他方式轉讓該字符串sys.error(「Scoobi工作ID未設置「) 返回

+1

謝謝,你說得對。前面有一個導入聲明「import Option。{apply =>?}」 – zjffdu 2012-04-06 08:39:54

7

這只是一個合法的字符,就像 「ABCD ...」

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

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

UPD:Valid identifier characters in ScalaScala method and values names

UPD2 :在例子「?」可能是功能,方法this或只是一些對象與apply方法。它可能會返回Option[String]

相關問題