よくわからない
最近プログラミング言語 scala にはまっているが、どうもよくわからない動作が多い。
val map = new scala.collection.mutable.HashMap[Class[_], AnyRef => String ] def f(value:Class[_]) = map.getOrElse(value,null) f(classOf[String]) // f の呼び出し中に map.getOrElse で例外発生
class TypeEx(self:Class[_]) { def getNameEx() = self.getName() } implicit def toTypeEx[_](t:Class[_]):TypeEx = new TypeEx(t) classOf[Int].getNameEx() // OK var r1:Class[_] = classOf[Int] r1.getNameEx() // OK val r2:Class[_] = classOf[Int] r2.getNameEx() // コンパイルエラー!!! (valだとimplicit convertion は使えないのか?) val r3 = classOf[Int] r3.getNameEx() // OK (valなのにOK。valで型を指定しているからダメだったのか?) val s:String = "ABC" s.r // OK (rはStringを暗黙の型変換で変換したRichStringのメンバ。valで型を指定しているのにOK)
環境
- scala version 2.7.1.final
- 64-Bit Server VM Java 1.6.0_06
- Windows Vista SP1