我想在 Scala 中使用光学而不是沿着嵌套结构向下遍历,而是像从子级到父级一样遍历其他方式。
case class Parent(param1: Int)
class Child(param2: Int)
val parent = Parent(param1)
val child = Child(param2)
// I would like something of this sort.
val parentParam1 = Lens[Child, Parent](_.parent)
我尝试过创建WithParent[T]
子类扩展的特征。例如 -
trait WithParent[T] extends scala.AnyRef with scala.Product {
var parent: T = ???
}
case class Parent(param1: Int)
case class Child(param2: Int) extends WithParent[Parent]
object WithParentCheck extends App {
val a = Parent(1)
val b = Child(2)
val parentParam1 = Lens[Child, Parent](_.parent)
}
我有2个问题-
- 这种方法会奏效吗?如果是这样,我可以在特征本身中定义父级吗?
- 有没有更好的方法来解决这个问题?
编辑:
编辑 2:帐户具有唯一的客户标识符。
真实世界场景
case class Customer(id: String, account: Account)
case class Account(id: String, balance: Double, customerId: String)
val account = Account('01', 100, '1')
val cust = Customer('1', account)
// Accessing customer from account
val customerToAccount = Lens[Customer, Account](_.account)
我的问题:反过来可能吗?从帐户对象访问客户?
我的方法的逻辑:
trait MyParent[T]
将包含一个parent
T 类型的对象/变量,可以从扩展它的案例类访问。
谢谢!