我的代码类似于以下摘录:
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。
答案 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
,所以我相信这是