我最近一直在玩弄无形。有一件非常基本的事情我无法解决这个问题:
import shapeless._
import syntax.singleton._
import record._
object NotWorking {
val result = ("value" :: HNil).zipWithKeys("key" :: HNil)
}
我希望这段代码能够输出可扩展的记录。但编译器无法找到withKeys
隐含的内容:
could not find implicit value for parameter withKeys: shapeless.ops.hlist.ZipWithKeys[shapeless.::[String,shapeless.HNil],shapeless.::[String,shapeless.HNil]]
[error] ("value" :: HNil).zipWithKeys("key" :: HNil)
它更令人困惑,因为我采用Shapeless'测试用例的例子完美无缺:
import shapeless._
import syntax.singleton._
import record._
object ShamelesslyStolenFromTests {
val orig =
("intField" ->> 1) ::
("boolField" ->> true) ::
HNil
val result = orig.values.zipWithKeys(orig.keys)
}
我错过了什么?
答案 0 :(得分:2)
以下代码编译:
import shapeless._
import syntax.singleton._
import record._
object FinallyWorking {
val result = ("value" :: HNil).zipWithKeys[Witness.`"key"`.T :: HNil]("key".narrow :: HNil)
}
所以这似乎是方法类型参数的类型推断的问题。