嵌套案例类的Getter

时间:2018-10-26 12:59:03

标签: scala shapeless

我想获取嵌套案例类的值,该嵌套案例类在此嵌套案例类中提供“路径”。

例如,给出:

case class Address(street : String, city : String, postcode : String)
// Nested case class
case class Person(name : String, age : Int, address : Address)

val person = Person("Joe Grey", 37, Address("Southover Street", "Brighton", "BN2 9UA"))

val path = "address_street" // _ is arbitrary separator

我希望getter(path)返回“ Southover Street”。

我用无定形的镜片尝试不同的东西,例如

val steetLens = lens[Person] >> Witness(Symbol("address")) >> Witness(Symbol("street"))
println(steetLens.get(person))

返回正确的内容,但是我不能以通用的方式使用它,因为这样的事情:

 val steetLens = lens[Person] >> addressField >> streetField

不起作用。

据我了解,我们无法根据通用字符串创建Symbol

1 个答案:

答案 0 :(得分:0)

您可以使用标准成分的镜片吗?

val address: Lens[Person, Address] = lens[Person].address
val street: Lens[Address, String] = lens[Address].street
val addressStreet: Lens[Person, String] = street compose address
addressStreet.get(person) // Southover Street