Null 类型的隐式转换
Implicit conversion on Null type
我正在尝试在 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 不为 null 时有效,但当 myString 为 null 时失败,returns:
error: value ?? is not a member of Null
val value = myString ?? "myString is null"
我理解这个错误,但是有没有办法在 Scala 中实现这个或者不可能?
谢谢
第一个建议:在编写 Scala 代码时应尽量遵循 Scala 惯用语。执行此操作的 Scala 方法可能类似于 ...
implicit class ShortCond(original: Any){
def ??(fallback : Any) =
Option(original).getOrElse(fallback)
}
val str:String = null
str ?? 34 // res0: Any = 34
"x" ?? 43 // res1: Any = x
但出于多种原因,这是一个坏主意,主要是您正在尝试 return 混合类型,这意味着编译器将其解析为类型 Any
,这并不好斯卡拉。一旦编译器不知道您的 val
是什么类型,那么您就将自己从类型系统的全面支持中移除。
我正在尝试在 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 不为 null 时有效,但当 myString 为 null 时失败,returns:
error: value ?? is not a member of Null
val value = myString ?? "myString is null"
我理解这个错误,但是有没有办法在 Scala 中实现这个或者不可能?
谢谢
第一个建议:在编写 Scala 代码时应尽量遵循 Scala 惯用语。执行此操作的 Scala 方法可能类似于 ...
implicit class ShortCond(original: Any){
def ??(fallback : Any) =
Option(original).getOrElse(fallback)
}
val str:String = null
str ?? 34 // res0: Any = 34
"x" ?? 43 // res1: Any = x
但出于多种原因,这是一个坏主意,主要是您正在尝试 return 混合类型,这意味着编译器将其解析为类型 Any
,这并不好斯卡拉。一旦编译器不知道您的 val
是什么类型,那么您就将自己从类型系统的全面支持中移除。