【发布时间】:2018-06-17 17:41:09
【问题描述】:
我有类似于以下摘录的代码:
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
}
}
这不会编译,因为编译器在调用getColour 时找不到参数d 的隐式狗。不过奇怪的是,如果我尝试将getColour 的结果分配给一个名为colour 以外的名称的val,它会起作用。此外,如果我将 2 行移出 main 方法,它也可以正常工作。任何想法是什么导致隐式解决在这里失败?
我使用的是 Scala 版本 2.12.6。
【问题讨论】:
-
有趣!如果您将这一行
implicit val dog = summon(Dog(colour = "orange"))替换为这一行implicit val dog = summon(Dog("orange")),它将起作用。也许您可以提交一份错误报告。 :) -
如果您明确声明
dog: Dog的类型,它也适用于colour。什么!!!^^