gpt4 book ai didi

scala - 是否可以更新实现共同特征的任何案例类的字段

转载 作者:行者123 更新时间:2023-12-04 14:28:03 25 4
gpt4 key购买 nike

让我们假设我们有一个共同的特征模型。

trait Model {
def id: String
def updated: Date
}

我们有 2 个案例类扩展了这个特性。
case class C1(id: String, updated: Date, foo: String) extends Model
case class C2(id: String, updated: Date, bar: Int) extends Model

是否可以编写像下面这样的实用程序函数,它将模型作为参数并返回带有更新字段的更新值的副本?
object Model {
def update[T <: Model](model: T): T = {
model.copy(updated = new Date) // This code does not compile.
}
}

最佳答案

您可以在这里编写的“最佳”抽象是 Lens看起来像:

trait Lens[A, B]{
def get: A => B
def set: (A, B) => A
}

这样你的代码看起来像:
def update[A](that: A, value: Date)(implicit tLens: Lens[A, Date]): A =
tLens set (that, value)

关于scala - 是否可以更新实现共同特征的任何案例类的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23198116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com