¿Cómo escribir un operador coalescente seguro a prueba de cero en Scala?
coalescing (1)
Al igual que:
case class ?:[T](x: T) {
def apply(): T = x
def apply[U >: Null](f: T => U): ?:[U] =
if (x == null) ?:[U](null)
else ?:[U](f(x))
}
Y en acción:
scala> val x = ?:("hel")(_ + "lo ")(_ * 2)(_ + "world")()
x: java.lang.String = hello hello world
scala> val x = ?:("hel")(_ + "lo ")(_ => (null: String))(_ + "world")()
x: java.lang.String = null
Habiendo visto las respuestas que surgen de preguntas como esta que involucran horror, como tratar de atrapar el NPE y sacar el nombre destrozado del rastro de la pila, estoy haciendo esta pregunta para poder responderla.
Comentarios o mejoras adicionales bienvenidos.