要解释标题问题,是否在函数的范围内将隐参数隐式为函数的隐式值?
下面是一个小小的测试:
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),没有看到任何提到这个事实,如果我是正确的理解事物。
发布于 2016-09-20 14:02:17
是的,内嵌参数可以通过在作用域中匹配隐式类型的其他函数访问。
取自http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html
有资格传递给隐式参数的实际参数可分为两类:
https://stackoverflow.com/questions/39596034
复制相似问题