【发布时间】:2016-08-29 14:03:43
【问题描述】:
我使用这种行来测试我的隐含,使其因复制粘贴意外而隐含。我花了很长时间才弄清楚为什么尽管我没想到它会编译它却能编译:
> console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
... skipped some comment lines ...
scala> case object Foo
defined object Foo
scala> object Bar { implicit val f: Foo.type = implicitly[Foo.type] }
defined object Bar
scala> val x = Bar.f
x: Foo.type = null
scala>
我希望 Bar 编译失败,因为没有 Foo.type 类型的隐式 val(案例对象未声明为隐式)。
对我来说,编译器似乎使用 f 自己的声明(左侧)来完成其实现(右侧)。
这真的是预期的行为吗?在运行时,这会导致带有 null 值的意外行为(对我来说主要是 NPE)。
【问题讨论】: