我试图重现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]'或其他空值避免值。 –