我試圖重現Scala中的一個C#語法:對空類型隱式轉換
的C#代碼:
val myValue = myObject ?? new MyClass();
基本上'myvalue的意願包含「myObject的」,如果它不爲空,或者一個'MyClass'的新實例,如果它是空的。
這是Scala代碼,我試圖運行:
case class ShortCond(original: Any){
def ??(fallback : Any) {
if (original == null)
return fallback
return original
}
}
implicit def any2ShortCond(original: Any) = ShortCond(original)
val myString = null
val value = myString ?? "myString is null"
它工作時的myString不爲空,但失敗了mystring時爲空,則返回:
error: value ?? is not a member of Null
val value = myString ?? "myString is null"
我明白錯誤,但是有沒有辦法在Scala中實現這一點,或者它是不可能的?
感謝
Scala鼓勵您不要在代碼中使用null。這就是你應該努力去做的。 –
我知道在Scala代碼中使用null是一個不好的做法,但是可以通過庫方法調用返回null值,並且您必須處理它。 – reevolt
你說得對。實際要做的事通常是在最低級別處理來自第三方庫的'null'值,然後傳播'Option [T]'或其他空值避免值。 –