ho creato seguente frammento:Tipo inferenza da destra a sinistra codice
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)
ci sono metodi destro e sinistro-associativa disponibili. Codice
seguenti lavori:
((_: Int) > 3) <| 7
((_: Int) > 3) <|: 7
7 |> (_ > 3)
Ma questo non lo fa:
(_ > 3) <| 7
(_ > 3) <|: 7
E 'possibile dedurre parametri di tipo da destra a sinistra?
Sono sorpreso che ci sia una differenza tra, '(_> 3) <|: 7' e' 7. \ '<|:\'(_ > 3)', ma in effetti solo quest'ultimo compila. Se non si ottiene una risposta qui, forse chiedere sulla mailing list o controllare il bug tracker? –
@Kipton nota che è possibile omettere i tick posteriori se si pone il '7' tra parentesi in questo modo:' (7). <|:(_ > 3) ', dal momento che il compilatore tenta di invocare' <|: 'su un' Double' '7.' senza la parentesi, che a sua volta conduce a un'invocazione infissa di' <|: 'e che riconduce al tipo problema di inferenza. – agilesteel