2011-02-07 59 views
3

在這個blogpost by James Iry,他寫道:將AnyRef放入選項的方法在哪裏?

此外,Scala有促進的值要麼有些(值)的「選項」法或無取決於它是否是空或不...

我似乎無法在scaladoc中的任何位置找到option方法。

Iulian Dragos的gdata客戶端項目包含的方法可能是James所指的。

def option[A <: AnyRef](a: A): Option[A] = 
    if (a eq null) None else Some(a) 

請指出我在哪裏可以在scaladoc中找到此方法。

P.S.我有一個看起來像這樣的方法:

def permutations(s: String): List[String] = ... 

在我心目中2我爲我是否應該將其更改爲:

def permutations(s: Option[String]): List[String] = ... 

,因爲客戶端可以與null調用它。目前在第一個實例中,我期望使用前面提到的option方法手動將其裝入一個字符串參數&。

+0

我注意到現在這個問題已經在這裏得到了解答:http://stackoverflow.com/questions/2105852/does-scala-have-a-library-method-to-wrap-nullable-return-values-in -an-option – 2011-02-07 07:02:22

+1

這是我的文章中的錯誤。我會解決它。正如其他人寫的,這是對Option的應用方法,所以慣用代碼看起來像「修復」 – 2011-02-07 16:08:36

回答

15

您可以簡單地使用應用工廠方法及其配套對象:

scala> Option.apply("Test")     
res51: Option[java.lang.String] = Some(Test) 

scala> Option.apply(null) 
res52: Option[Null] = None 

...或較短的版本:

scala> Option("Test") 
res49: Option[java.lang.String] = Some(Test) 

scala> Option(null) 
res50: Option[Null] = None