2016-09-20 27 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.html(根據Passing scala.math.Integral as implicit parameter),並沒有看到任何提及這個事實,如果我正確地理解事情。

+1

雖然你的問題到底是什麼? –

+0

標題,但是爲了解釋,函數的隱式參數是隱式函數的範圍內的參數嗎? – bbarker

回答

3

是隱式PARAMS可以通過其他功能相匹配的隱式類型範圍

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

有資格被傳遞到一個隱含的參數分爲兩類的實際參數兩者內訪問:

  • 首先,符合條件的都可以在 點的方法調用訪問的所有標識符X withou t前綴並且表示隱式定義或隱式參數。

  • 其次,符合條件的也都是 隱式參數類型的伴隨模塊的成員,它們被標記爲隱含的 。

+0

啊我看到「表示隱式定義*或隱式參數*」;我不確定以前是否見過這種情況,但即使我這樣做了,也可能會掩蓋它 - 謝謝! – bbarker