无形记录:更新不同类型的字段

时间:2017-09-29 09:18:17

标签: scala shapeless

是否可以更新具有不同类型的HList记录,因为给定了一个列表:

val l1 = 'field1 ->> 1 :: 'field2 ->> 2 :: HNil

使用其他类型更新field2不会更新,但会添加新字段:

l1 + ('field2 ->> "2")
//1 :: 2 :: "2" :: HNil

是否可以禁用此行为?

1 个答案:

答案 0 :(得分:3)

您可以通过导入记录操作然后使用updateWith

来执行此操作
import shapeless.record._

l1.updateWith('field2)(_ => "2")

updateWith的第二部分的功能粗略地说是类型A => B,其中A是原始类型"指向" 'field2B是您要将其转换为的类型。因此,由于'field2的原始值为2,您也可以通过这种方式进行转换:

l1.updateWith('field2)(_.toString)