我想创建一个从类[A]到A的HMap,但我找不到一种看起来不丑的方法。我试过了:
val defaultValues = HMap[(Class ~?> Id)#λ](
classOf[String] -> "",
classOf[Int] -> 0)
但是我收到编译错误,因为Class [String],String没有隐式。我可以通过使用Id:
显式键入参数来进行编译val defaultValues = HMap[(Class ~?> Id)#λ](
classOf[String] -> ("": Id[String]),
classOf[Int] -> (0: Id[Int]))
虽然它并不十分吸引人 - 有没有办法可以做到这一点而不需要“:Id [A]”?
答案 0 :(得分:0)
HMap使用隐含的证据证明您已允许将键/值对放入地图中。当您构建HMap或将值放入其中或从中获取值时,您必须在隐式中编码所需的约束。
import shapeless.HMap
class HMapExample {
class InstanceOfConstraint[K, V]
implicit def instanceOfClass[T] = new InstanceOfConstraint[Class[T], T]
val defaultValues = HMap[InstanceOfConstraint](
classOf[String] -> "Hello",
classOf[Int] -> 23
)
}
应该做你需要的。