То, что вы хотите, это шаблон Enhify-My-Library. При этом вы можете добавить новый метод к List
. Вот как это будет выглядеть:
class EnhancedList[T](self: List[T]) {
def ?:(t: T) =
t match {
case null => self
case _ => t :: self
}
}
implicit def enhanceList[T](self: List[T]) = new EnhancedList(self)
Итак, есть класс EnhancedList
, который охватывает List
, где определен новый метод ?:
, и неявная функция, которая преобразует List
в EnhancedList
при вызове ?:
. Обратите внимание, что вы должны использовать ?:
вместо :?
, потому что правила Scala таковы, что оператор является ассоциативным по праву тогда и только тогда, когда он заканчивается на :
.
Вот как это используется:
scala> val l = List("a","b","c")
l: List[java.lang.String] = List(a, b, c)
scala> null ?: l
res136: List[java.lang.String] = List(a, b, c)
scala> "d" ?: l
res137: List[java.lang.String] = List(d, a, b, c)