Я пытаюсь воспроизвести C# синтаксис в Scala:неявное преобразование от типа Null
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 имеет нулевое значение, она возвращает:
error: value ?? is not a member of Null
val value = myString ?? "myString is null"
Я понимаю, ошибка, но есть ли способ достичь этого в Scala или это невозможно?
Благодаря
Scala рекомендует вам не использовать «null» в вашем коде вообще. Это то, к чему вы должны стремиться. –
Я знаю, что это неправильная практика использования null в коде Scala, но нулевое значение может быть возвращено с помощью вызова метода библиотеки, и вам придется иметь дело с ним. – reevolt
Ты прав. Фактическая задача - обычно следить за значениями «null» из сторонних библиотек на самом нижнем уровне, а затем распространять «Option [T]» или другие значения, исключающие null. –