2016-11-21 24 views
5

考える:スカラ:暗黙的に暗黙のクラスに

implicit class Foo(val i: Int) { 
    def addValue(v: Int): Int = i + v 
} 

はそれが可能適用されるimplicitlyのですか? は、私がここでエラーが出ます:

<console>:14: error: could not find implicit value for parameter e: Foo 
     implicitly[Foo] 
+0

'暗黙的に[Foo](4)'は 'res0:Foo = Foo @ 5d5eef3d'を返します。 –

+0

これは 'val foo:Foo = 4'がコンパイルされるのと同じ理由によるものです。 –

答えて

6

implicit class Foo(val i: Int)IntからFoo暗黙の変換があることを意味します。だからimplicitly[Int => Foo]はうまくいくはずです。

Fooimplicitly[Foo]と召喚することができる場合は、Fooとなりますか? Foo(0)? A Foo(1)? A Foo(2)?さらなる詳細について

0

implcitlyキーワードは[T]はコンテキスト手段

タイプTの戻り暗黙値を意味implitly

を以下のように説明することができますFoo暗黙的にスコープ内に暗黙の値を作成する必要があります

例えば

また
implicit class Foo(val i: Int) { 
    def addValue(v: Int): Int = i + v 
} 

implicit val foo:Foo = Foo(1) 
val fooImplicitly = implicitly[Foo] // Foo(1) 

Foo自体が唯一のクラスであることに注意し、

しかし、クラス定義の前に暗黙のキーワードを置くことによって、

コンパイラは、タイプの暗黙の関数を作成しますInt => Foo

関連する問題