为什么Scala找不到这里的隐式值?
class A
class Foo {
lazy val x = implicitly[A]
implicit lazy val a = new A
}
错误:无法找到参数e的隐式值
但是这个例子完全正常:
class Foo {
lazy val x = implicitly[A]
implicit lazy val a: A = new A // note explicit result type
}
定义了一个名为Foo的类
顺便提一下,我在这个应用程序中卡在Scala 2.10上。此外,用def
替换lazy val
似乎并没有改变任何东西。
在我的实际应用程序中,我有一个文件,其中定义了许多隐式对象,这些对象是针对各种域对象定义的,其中一些依赖于彼此。尝试安排它们以确保所有依赖项都在其相应的依赖项之前似乎像是一场噩梦,因此我将它们全部标记为lazy
。不得不显式声明每个这些val
的类型会使代码变得混乱,并且似乎是不必要的。有没有办法解决这个问题?
implicit lazy val a = new A; lazy val x = implicitly[A]
。这不应该是Scala中的一个bug吗? - tuxdna