【问题标题】:implicit value not found未找到隐含值
【发布时间】:2010-09-15 17:02:39
【问题描述】:
class Test {
    import scala.collection._

    class Parent
    class Child extends Parent

    implicit val children = mutable.Map[String, Child]()

    def createEntities[T <: Parent](names: String*) = names.foreach(createEntity[T])


    def createEntity[T <: Parent](name: String)(implicit map: mutable.Map[String, T]): Unit = map.get(name) match {
        case None => println( name + " not defined.")
        case _ =>
    }
}

为什么编译器会抱怨:

错误:找不到参数映射的隐式值:scala.collection.mutable.Map[String,T] names.foreach(createEntity[T])

?

【问题讨论】:

    标签: scala implicit


    【解决方案1】:

    如果你调用,例如,createEntities[Parent]("A", "B")(你可以,因为ParentParent 的一个子类型),它需要一个隐含的mutable.Map[String, Parent],而且没有。更准确地说,您的定义要求您为Parent每个 子类型提供mutable.Map[String, T],而不仅仅是已经定义的子类型:

    implicit def aMap[T <: Parent]: mutable.Map[String, T] = ...
    

    【讨论】:

    • names.foreach(createEntity[T]) 调用需要一个隐式参数。如果你删除这个调用,它当然会编译!
    • 知道了。调用 : createEntity[Child]() 但不是 createEntity[T]() 是合法的,因为 mutable.Map[String, Child] 有一个隐式值,但 mutable.Map[String, T] 没有一个隐式值
    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多