2016-09-20 19 views
1

タイトル質問を言い換えると、関数のスコープ内の関数の暗黙的な値に対する暗黙のパラメータですか?ここで暗黙的なパラメータ値自体は暗黙的な値ですか?

は、小規模なテストです:

object ImplicitTest{ 

    case class Foo() 

    def myOtherFun()(implicit myfoo: Foo) = { 
    val grabImpFoo = implicitly[Foo] 
    println(myfoo.toString + " from myOtherFun") 
    } 
} 

import ImplicitTest._ 

class ImplicitTest { 
    def myFun()(implicit myfoo: Foo) = { 
    println(myfoo.toString) 
    myOtherFun() 
    } 

} 

は今、それを実行します。

implicit val foo = Foo() 
    val it = new ImplicitTest() 
    it.myFun() 

これはmyOtherFunは私がやった、暗黙の引数を見つけることができますので、暗黙の暗黙のパラメータが自分自身であることを私に実証するようですしばらくの間信じられませんでした!これには長所と短所があると思いますが、私は事実を学ぶためにここにいます。私はhttp://docs.scala-lang.org/tutorials/FAQ/finding-implicits.htmlPassing scala.math.Integral as implicit parameterに基づいて)を見て、私が事を正しく理解しているなら、この事実の言及を見ませんでした。範囲内

+1

あなたの質問は何ですか? –

+0

タイトルは、言い換えれば、関数のスコープ内の関数の暗黙的な値に対する暗黙のパラメータですか? – bbarker

答えて

3

はいimplictのparamsは、一致する暗黙の型と他の機能によってアクセスされることができる

http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html

から二つのカテゴリに暗黙パラメータ秋に渡される対象である実引数を取ら。

  • まず、対象は、メソッド呼び出しの 時点でアクセスできるすべての識別子Xはwithou接頭語であり、暗黙的な定義または暗黙的なパラメータを示す。

  • 第2に、 暗黙的にラベル付けされた暗黙のパラメータ型のコンパニオンモジュールのメンバーである もすべて対象です。

+0

ああ、私は "暗黙的な定義*または暗黙的なパラメータ*"を参照してください。私がこれを以前に見たことは確かではありませんでしたが、私がしたとしても、おそらくそれを光栄に思っていました - ありがと! – bbarker

関連する問題