隐式参数值隐含值本身吗?

时间:2016-09-20 13:54:13

标签: scala implicit

要解释标题问题,是函数范围内函数隐式值的隐式参数吗?

这是一个小测试:

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 :(得分:3)

是的暗示params可以被其他函数访问,其范围内的匹配隐式类型

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

  

有资格传递给隐式参数的实际参数分为两类:

     
      
  • 首先,符合条件的是可以访问的所有标识符x   没有前缀的方法调用的点,表示隐式   定义或隐含参数。

  •   
  • 其次,符合条件的都是   隐式参数类型的伴随模块的成员   标记隐含。

  •