В соответствии со спецификацией Scala (2.8), чтобы найти неявное выражение, оно должно быть определено в локальной области, наследуемой области или в сопутствующем объекте.Учитывая это, мне кажется, что следующий код должен работать без явного импорта содержимого объекта-компаньона .Я вижу, что это используется в исходном коде библиотеки Scala (например, CanBuildFrom).Также кажется, что я должен иметь возможность вызывать XX.foo () вне определения класса XX и использовать мой неявный параметр из используемого класса-компаньона.Чего мне не хватает?
object XX {
implicit def XYZ[T]: (T) => Unit = null
}
class XX {
// import XX._ // Works with this line uncommented...
def foo(s: String)(implicit f: (String) => Unit): Unit = {
if (f == null)
println("Just: " + s)
else
f(s)
}
def bar {
foo("abc"){ s => println("Func: " + s)}
foo("xyz") // <-- Compile error here: could not find implicit value for parameter f
}
}