我有类似于以下摘录的代码:
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