he creado siguiente fragmento:La inferencia de tipos de derecha a izquierda código
class PimpToRight[A](f: A => Boolean) {
def <| (a: A) = f(a)
}
implicit def f2pimp[A](f: A => Boolean) = new PimpToRight(f)
class PimpToLeft[A](a: A) {
def <|: (f: A => Boolean) = f(a)
def |> (f: A => Boolean) = f(a)
}
implicit def a2pimp[A](a: A) = new PimpToLeft(a)
hay métodos derecha e izquierda asociativo disponibles.
siguiente código funciona:
((_: Int) > 3) <| 7
((_: Int) > 3) <|: 7
7 |> (_ > 3)
Pero esto no es así:
(_ > 3) <| 7
(_ > 3) <|: 7
¿Es posible inferir los parámetros de tipo de derecha a izquierda?
Me sorprende que haya una diferencia entre '(_> 3) <|: 7' y' 7. \ '<|:\'(_ > 3)', pero de hecho solo este último compila. Si no obtiene una respuesta aquí, tal vez pregunte en la lista de correo o verifique el rastreador de errores. –
@Kipton tenga en cuenta que puede omitir las marcas de retroceso si coloca el '7' entre paréntesis como este:' (7). <|:(_ > 3) ', ya que el compilador intenta invocar' <|: 'en un' Doble'' 7.' sin el paréntesis, que a su vez conduce a una invocación infija de '<|:' y eso nos lleva de vuelta al tipo problema de inferencia – agilesteel