Я смущен этим описанием в «5.1.3 неявного разрешения» в книге Джошуа Suareth в Scala в глубину, на странице 100:implicits для объектов в Scala
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
Но в то время как я делаю объект Bar заложенным в РЕПЛ:
scala> object Foo {
| implicit object Bar {
| override def toString = "isBar" }
| }
defined module Foo
scala> implicitly[Foo.Bar.type]
res0: Foo.Bar.type = isBar
Кажется, что это не нужно определить неявный во внешней области. Или я не считаю смысл Джошуа совершенно неправильным?
Когда была написана книга и какая версия Scala вы используете? Возможно, это немного изменилось в 2.9 или 2.10. – KChaloux
Вещи, как в моем ответе, по крайней мере, от 2.9.x. Джош, должно быть, имел в виду Scala pre-2.9, или просто не знал семантики. FTR Я был удивлен и рад, когда обнаружил, что это возможно. –
Спасибо за ответ. В этой книге предлагается, чтобы он охватывал 2.7.x до 2.9.x. У меня на компьютере установлена 2.10, которая может вести себя по-другому. – cfchou