我用Scala隐式解决方法得到了意想不到的行为,我想知道这个bug是在我的理解中还是在Scala编译器中.这是代码:
trait Trait1[A]
implicit def trait1ToList[A](trait1: Trait1[A]): List[A] = ???
trait Trait2[C]
{
implicit def trait2Implicit[A, C <% List[A]]: Trait2[C] = ???
// Compiles, as expected.
implicitly[Trait2[Trait1[Int]]]
}
{
implicit def trait2Pimp[A, C <% List[A]](int: Int): Trait2[C] = ???
// Compiles, as expected.
implicitly[Int => Trait2[Trait1[Int]]]
// Does not compile, which is unexpected.
// This is weird, because the fact the previous line compiles
// implies the implicit conversion is in scope.
2: Trait2[Trait1[Int]]
}
Run Code Online (Sandbox Code Playgroud)
编译错误是:
[error] /Users/eric/Dropbox/t/2013_q1/billy/src/test/scala/billy/experiments/wideBaseline/testWideBaselineExperiment.scala:56: No implicit view available from Trait1[Int] => List[A].
[error] 2: Trait2[Trait1[Int]]
[error] ^
Run Code Online (Sandbox Code Playgroud)