运维开发网

在Scala中为隐式参数隐式转换通用容器

运维开发网 https://www.qedev.com 2020-07-20 14:00 出处:网络 作者:运维开发网整理
有没有办法让这项工作? ( Scala 2.8.1) class A def f(implicit a: A) = 0 class Vendor[T](val v: T) implicit val vendor = new Vendor(new A) implicit def vendorToVal[T](implicit v: Vendor[T]) = v.v f 错误是:’从方法vendor
有没有办法让这项工作? ( Scala 2.8.1)

class A
def f(implicit a: A) = 0

class Vendor[T](val v: T)
implicit val vendor = new Vendor(new A)
implicit def vendorToVal[T](implicit v: Vendor[T]) = v.v
f

错误是:’从方法vendorToVal开始,为类型A分散隐式扩展’

这与Lift 2.2依赖注入有关,实际代码如下所示:

class UserStore(implicit db: DbAccess)
object DependencyFactory extends Factory {
  implicit val db = new FactoryMaker[DbAccess](Model) {}
  import db._ // implicit conversion would allow to remove this import

  implicit val userStore = new FactoryMaker[UserStore](new UserStore) {}
}

这个问题与:Is there a way to implicitly convert an implicit parameter in Scala?有关

这个问题是由vendorToVal方法引起的 – 当我在隐式类型参数化方法中使用隐式参数时,我多次观察到相同的行为.不幸的是,我在2.8._中找不到简单而优雅的胶水.

一些与主题相关的有趣线程:

> http://scala-programming-language.1934581.n4.nabble.com/scala-Why-is-this-a-diverging-implicit-td1998156.html

> http://www.scala-lang.org/node/6847

0

精彩评论

暂无评论...
验证码 换一张
取 消