2017-09-29 4 views
1

Est-il possible de mettre à jour un enregistrement HList avec un autre type, puisque donné une liste:enregistrement Shapeless: mettre à jour un champ avec différents types

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

mise à jour field2 avec un autre type ne serait pas mise à jour, mais ajouter une nouvelle champ:

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

Est-il possible de désactiver ce comportement?

Répondre

3

Vous pouvez le faire en important opérations d'enregistrement et puis utilisez updateWith:

import shapeless.record._ 

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

La fonction de la deuxième section de updateWith est, grosso modo, de type A => B, où A est le type original « souligné » par 'field2 et B est le type que vous souhaitez transformer en. Donc, puisque la valeur d'origine pour 'field2 était 2, vous auriez pu faire la transformation de cette façon aussi:

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