Scala 仕様 (2.8) によると、暗黙的が見つかるには、ローカル スコープ、継承されたスコープ、またはコンパニオンオブジェクトで定義する必要があります。それを考えると、次のコードは、コンパニオン オブジェクトの内容を明示的にインポートしなくても機能するはずです。これは Scala ライブラリ ソース (例: CanBuildFrom) で使用されています。また、XX クラスの定義の外側から XX.foo() を呼び出して、コンパニオン クラスの暗黙のパラメーターを使用できるようにする必要があるようです。私は何が欠けていますか?
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
}
}