object Test {
import scala.language.implicitConversions
case class C1() {}
case class C2() {}
implicit def c1ToC2(in: C1): C2 = C2()
def from[A, B](in: A)(implicit f: A => B): B = f(in)
def fails(): Future[C2] = {
val future: Future[C1] = Future.successful(C1())
future.map(from) // this line fails to compile!
}
def compiles1(): Future[C2] = {
val future: Future[C1] = Future.successful(C1())
future.map(x => from(x))
}
def compiles2(): Future[C2] = {
val future: Future[C1] = Future.successful(C1())
future.map(from[C1, C2])
}
}
Dans cet exemple, seule la méthode fails
ne parvient pas à compiler. Le message d'erreur est:
Error:(23, 16) No implicit view available from A => B. future.map(from)
Je suis confus au sujet de pourquoi pas de vue implicite se trouve. Sur la base des compiles1
et compiles2
méthodes, à la fois compilera, il semble qu'il y ait est une vue implicite disponible de A => B.
ce qui se passe ici, et pourquoi les deux méthodes de compilesN
, mais fails
ne fait pas? Mes antécédents: J'apprends toujours Scala, alors il pourrait facilement y avoir quelque chose qui me manque. :)
Je suis sur Scala 2.11.8.