隐含的价值没有发现

问题描述:

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 [字符串,T] names.foreach(createEntity [T ])

如果调用,例如,createEntities[Parent]("A", "B")(其可以,因为ParentParent亚型),它需要一个隐式mutable.Map[String, Parent],并且没有一个。更精确地说,你的定义需要你提供一个mutable.Map[String, T]亚型Parent,而不仅仅是那些已经定义:

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

这是'names.foreach(createEntity [T])'调用,它需要一个隐含的论点。如果你删除这个调用,当然它编译! – 2010-09-15 10:32:00

+1

明白了。调用:createEntity [Child]()但不createEntity [T]()是合法的,因为对于mutable.Map [String,Child]有一个隐式值,但对于mutable.Map [String,T]没有隐式值 – xiefei 2010-09-15 11:53:12

+0

是的,精确的。 – 2010-09-15 12:03:31