Есть ли способ заставить эту работу (Scala 2.8.1):
class A
class B
def f(implicit b: B) {}
implicit val a = new A
implicit def aToB(a: A) = new B
f(a) // works ok
f // error: could not find implicit value for parameter b: B
На самом деле моя проблема с внедрением зависимостей в Lift (2.2), я пытаюсь преобразовать Vendor [T] вT и неявно требуют его в конструкторе класса без добавления импорта после каждого значения:
object DependencyFactory extends Factory {
implicit def vendorToVal[T](vendor: Vendor[T]): T = vendor.vend
implicit val db = new FactoryMaker[DbAccess](Model) {}
//uncommenting the following line makes it work, but can we avoid it?
//import db._
implicit val userStore = new FactoryMaker[UserStore](new UserStore) {}
}
Где UserStore
:
class UserStore(implicit db: DbAccess)
Я что-то не так делаю?
ОБНОВЛЕНИЕ
Спасибо Easy Angel за ответы на первую часть.Но это не решает мою проблему Lift DI, потому что выясняется, что существует обратное преобразование в области видимости (из T в Vendor [T]), и наличие того и другого приводит к «ошибке: расходящееся неявное расширение».
Можно ли это решить?
UPDATE2
Ух ты, еще одна проблема после предыдущей: есть преобразование из некоторого Контейнера [T] в T с неявным экземпляром Container [U] в области видимости и функция с неявным параметром U также приводит к «расходящемуся неявному расширению»:
class A
case class Vendor[T](v: T)
def f(implicit a: A) {}
implicit val vendor = Vendor(new A)
implicit def vendorToVal[T](implicit v: Vendor[T]) = v.v
f
Есть подсказки?