Согласно Scala Spec (2.8), для обнаружения неявного, он должен быть определен в локальной области, унаследованной области или в companion объект. Учитывая это, мне кажется, что следующий код должен работать без явного импорта содержимого сопутствующего объекта . Я вижу, что это используется в исходном коде библиотеки 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
}
}