0

我想在 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个问题-

  1. 这种方法会奏效吗?如果是这样,我可以在特征本身中定义父级吗?
  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]将包含一个parentT 类型的对象/变量,可以从扩展它的案例类访问。

谢谢!

4

0 回答 0