我使用shapeless进行case类转换,我有一个2个案例类:
import shapeless._
case class Foo(id: Int, name: String)
case class Bar(id: Int, name: String, price: Double)
val fooGen = Generic[Foo]
val barGen = Generic[Bar]
val foo = Foo(1, "foo")
val fooRepr = fooGen.to(foo)
val additional = fooRepr :+ 1.0
val bar = barGen.from(additional)
Run Code Online (Sandbox Code Playgroud)
这工作正常,但当我尝试将Bar转换为Foo时
fooGen.from(barGen.to(bar))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
found : main.barGen.Repr
[error] (which expands to) shapeless.::[Int,shapeless.:: [String,shapeless.::[Double,shapeless.HNil]]]
[error] required: main.fooGen.Repr
[error] (which expands to) shapeless.::[Int,shapeless.::[String,shapeless.HNil]]
[error] println(fooGen.from(barGen.to(bar)))
Run Code Online (Sandbox Code Playgroud)
是否有可能将一个案例类转换为更多字段而不是另一个案例类?
类似于您如何调整HList的表现Foo,通过添加元素,你必须调整HList的表现Bar为好,通过去除多余的元素:
fooGen.from(barGen.to(bar).take(2))
Run Code Online (Sandbox Code Playgroud)
take接受一个Nat参数,这行代码使用从Int文字到Nat类型级自然数的隐式转换.
您可以在HLists中找到其他可用的方法shapeless.syntax.hlists.scala.
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |