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

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,它将起作用。另外,如果我将2行移出main方法,它也会正常工作。有什么想法导致隐式解析在这里失败?

我正在使用Scala 2.12.6版本。

最佳答案

如果我们这样删除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

10-01 20:15
查看更多