在main方法中使用时无法找到隐式

时间:2018-06-17 17:41:09

标签: scala implicit

我的代码类似于以下摘录:

object Obj {
  case class Dog(colour: String= "brown")

  def summon(dog: Dog = Dog()): Dog = dog

  def getColour(implicit d: Dog): String = d.colour

  def main(args: Array[String]): Unit = {
    implicit val dog = summon(Dog(colour = "orange"))

    val colour = getColour
  }
}

这不能编译,因为在调用d时,编译器无法为参数getColour找到隐式狗。但奇怪的是,如果我尝试将getColour的结果分配给名为colour以外的其他值的val,则它可以正常工作。此外,如果我从main方法中移出2行也可以。是什么导致隐式解决方案在这里失败?

我正在使用Scala版本2.12.6。

1 个答案:

答案 0 :(得分:3)

如果我们删除implicit,那么

  def main(args: Array[String]): Unit = {
    val dog = summon(Dog(colour = "orange"))
    val colour = getColour(dog) // error: recursive value dog needs type
  }

我们得到recursive value dog needs type,所以我相信这是

的一个例子

https://issues.scala-lang.org/browse/SI-5091