Неявные параметры Scala со значениями по умолчанию, определенными в сопутствующем объекте

Согласно 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
  }
}
7
задан sellmerfud 20 January 2011 в 16:23
поделиться