要解释标题问题,是函数范围内函数隐式值的隐式参数吗?
这是一个小测试:
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),如果我理解正确的话,就没有提到这个事实。
答案 0 :(得分:3)
是的暗示params可以被其他函数访问,其范围内的匹配隐式类型
取自http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html
有资格传递给隐式参数的实际参数分为两类:
首先,符合条件的是可以访问的所有标识符x 没有前缀的方法调用的点,表示隐式 定义或隐含参数。
其次,符合条件的都是 隐式参数类型的伴随模块的成员 标记隐含。