以下がバグなのか機能なのか疑問に思っています:
Welcome to Scala version 2.10.0-M3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> class TypeClass[T]
defined class TypeClass
scala> trait A[T] {
| implicit val t = implicitly[TypeClass[T]]
| }
<console>:9: error: could not find implicit value for parameter e: TypeClass[T]
implicit val t = implicitly[TypeClass[T]]
^
予想どおり、 に制約がないため、これはコンパイルされませんT
。しかし、型注釈を追加すると、コンパイルされます。
scala> trait A[T] {
| implicit val t: TypeClass[T] = implicitly[TypeClass[T]]
| }
defined trait A
コンパイラはここで不平を言うべきではありませんか? 型注釈が違いを生むのはなぜですか? この特性で何かをインスタンス化すると、t
is null
.