私はこのtutorialを読んでいると、暗黙的な変換定義をコンパイルするとき、コンパイラは警告して無差別に使用されている場合、暗黙的な変換が落とし穴を持つことができるため下部にはなぜimplicit defにはimplicitConversionsのインポートが必要ですが、implicit valではインポートが必要ですか?
を述べています。警告は、これらのアクションのいずれかを取るオフにするには:あなたがではなく、暗黙的なヴァルを使用している場合、暗黙的な変換定義のスコープにインポートscala.language.implicitConversionsを...
警告がスローされません。暗黙のdef。何故ですか?
つまり、私は次の操作を実行した場合、私は輸入を必要としない:
implicit val int2str = (i: Int) => i.toString
しかし、私は次のことを行うならば、私は、インポートが必要です。
implicit def int2str(i: Int) = i.toString
- ----更新-----ここ は暗黙のvalが機能することを示している、おもちゃの例です:
おそらくcase class CoolString(coolString: String)
class RichCoolString(rich: CoolString) {
val hasCat: Boolean = rich.coolString.contains("cat")
}
object RichCoolString {
implicit val coolStringToRichCoolString = (coolString: CoolString) => new
RichCoolString(coolString)
}
scala> import RichCoolString._
import RichCoolString._
scala> CoolString("cool cats").hasCat
res0: Boolean = true
暗黙の変換は、暗黙のうちに「自動的に」自動的に適用されます。誤解を招く可能性があります。 Typeclassは暗黙的に0..n型に基づいています。 – cchantep