首先,简短描述。似乎如果我在一个伴随对象中放入一个隐含的其他类型并将其隐式导入该类的范围,则在隐式解析期间找不到它,直到它被显式引用一次(或在类上面定义)。示例如下。
class A(val a: Something)
object A {
implicit val default = ... //found by default
}
object B {
def func(fn: => T)(implicit a: A) = ...
}
class Broken {
def doSomething = {
import Broken._ // or Broken.actual
B.func { ... } // Uses A.default, not Broken.actual for implicit
}
}
object Broken {
implicit val actual = ...
}
class Fixed {
def doSomething = {
import Fixed._
println(actual) //reference actual
B.func { ... } // uses Fixed.actual
}
}
object Fixed {
implicit val actual = ...
}
object WTF {
implicit val actual = ...
}
class WTF {
def doSomething = {
import WTF._
B.func { ... } // With object definition first this works without referencing actual
}
}
我有点假设在这一点上我发现了一个编译器错误,所以我会打开一个针对Scala的jira,但同时我想知道这里是否有人知道这是否是预期的,或者是否有已经是一个开放的错误吗?
编辑:https://issues.scala-lang.org/browse/SI-7830
edit2:从所有实际和默认值中删除“:A”类型声明,以正确地重新创建我的问题。