2012-04-06 4 views
11

Tôi gặp một số mã scala với "?" nhưng không biết nó có nghĩa là gì trong scala, bất cứ ai có thể giải thích cho tôi? Cảm ơn."?" biểu tượng (dấu chấm hỏi) có nghĩa là trong Scala?

Và đây là một ví dụ

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

Bạn có thể đưa ra ví dụ không? Các "?" có thể là một phần của tên phương thức, tên lớp hoặc thứ gì đó khác. Nó không phải là một nhà điều hành tiêu chuẩn trong Scala. – Jesper

+0

'val lovely_? = isItAGoodDay() '<- như thế? –

+0

chỉ là tôi hay là "?" phương pháp trợ giúp trong trường hợp này hoàn toàn vô nghĩa? Kết quả tương tự, với ít ký tự và, IMHO, rõ ràng hơn, thu được với tiêu chuẩn, conf.get ("foo") getOrElse sys.error ("bar") – virtualeyes

Trả lời

25

Đối với tôi, nó giống như phương pháp áp dụng Tùy chọn. Có đâu đó câu lệnh import sau trong mã:

import Option.{apply => ?} 

Điều này có nghĩa áp dụng được nhập khẩu như ?. Từ doc của Option.apply:

Một nhà máy Tùy chọn mà tạo ra một số (x) nếu đối số không phải là null,
và None nếu nó là null.

Toàn bộ tuyên bố có nghĩa là sau đó:

nếu conf.get ("scoobi.jobid") không phải là null bình đẳng, gán chuỗi này, khác gán chuỗi sys.error ("Công việc Scoobi id không được đặt. ") trả về

+1

Cảm ơn, bạn đã đúng. Có một câu lệnh nhập trước "tùy chọn nhập. {Apply =>?}" – zjffdu

7

Nó chỉ là một nhân vật hợp pháp, giống như "abcd ..."

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

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

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

UPD2 : Trong ví dụ "?" có thể là hàm, phương thức this hoặc chỉ một số đối tượng với phương thức apply. Nó có thể trả về Option[String].