Es posible utilizar implícitos para lograr un efecto similar. Por ejemplo: (no probado, pero debería ser algo como esto)
object Operator {
class WithOperator[T](that: T) {
def &:[U](f: T => U) = f(that)
}
implicit def withOperator[T](that: T) = new WithOperator(that)
}
El uso de este sistema, no se puede utilizar el nombre $, porque el nombre tiene que terminar con un: (a fijar la asociatividad) y el dólar es un identificador normal (no el identificador del operador), por lo que no puede tenerlo en el mismo nombre que a:, a menos que los separe con guiones bajos.
Entonces, ¿cómo los usa? De esta manera:
val plusOne = (x: Int) => {x + 1}
plusOne &: plusOne &: plusOne &: 1
Perseguido de nuevo por el infractor fantasma que no deja explicación ... lo más extraño –
precioso fragmento de código que el primero - lo tendré a mano para recordarme a mí mismo estas reglas. Gracias –