[英]implicits for objects in Scala
我对Joshua Suareth的书Scala中的“5.1.3隐式解决方案”中的描述感到困惑,第100页:
Scala对象不能包含implicits的伴随对象。 因此,必须从外部作用域提供与该对象类型的隐式作用域所需的对象类型相关的隐含。 这是一个例子:
scala> object Foo {
| object Bar { override def toString = "Bar" }
| implicit def b : Bar.type = Bar
|}
defined module Foo
scala> implicitly[Foo.Bar.type]
res1: Foo.Bar.type = Bar
但是我在REPL中隐藏了对象Bar:
scala> object Foo {
| implicit object Bar {
| override def toString = "isBar" }
| }
defined module Foo
scala> implicitly[Foo.Bar.type]
res0: Foo.Bar.type = isBar
似乎它不需要在外部范围中定义隐式。 或者我认为约书亚的意思完全错了?
如果您将以下代码放在一个文件中并尝试使用scalac
进行编译,则使用'implicit' modifier cannot be used for top-level objects
失败并'implicit' modifier cannot be used for top-level objects
implicit object Foo {
object Bar { override def toString = "Bar" }
}
然而这编译很好:
object Foo {
implicit object Bar { override def toString = "Bar" }
}
我认为使用REPL
implicit's
并不完全是顶层因此看似不一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.