【问题标题】:Are implicit parameter values implicit values themselves?隐式参数值本身是隐式值吗?
【发布时间】:2016-09-20 13:54:12
【问题描述】:

套用标题问题,函数的隐含参数是函数范围内的隐含值吗?

这是一个小测试:

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)并没有看到任何提及这个事实,如果我理解正确的话。

【问题讨论】:

  • 你的问题到底是什么?
  • 标题,但要解释一下,是函数范围内函数隐含值的隐含参数吗?

标签: scala implicit


【解决方案1】:

是的,隐含参数可以被范围内具有匹配隐式类型的其他函数访问

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

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

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

  • 第二,符合条件的也都是 隐式参数类型的伴随模块的成员是 标记为隐式。

【讨论】:

  • 啊,我看到“表示隐式定义或隐式参数”;不确定我以前见过这个,但即使我见过,我也可能掩盖了它 - 谢谢!。
猜你喜欢
  • 1970-01-01
  • 2016-01-17
  • 2012-04-30
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2017-02-02
  • 1970-01-01
相关资源
最近更新 更多