gpt4 book ai didi

scala - 非案例类的“复制”?

转载 作者:行者123 更新时间:2023-12-02 19:22:37 24 4
gpt4 key购买 nike

当我设计不可变对象(immutable对象)时,由于自动生成的 copy 方法,案例类非常方便。

但是案例类有其自身的问题:它们不应该被继承,并且即使您不需要,它们也会为您提供一个提取器。

所以有时我必须使用普通的 Scala 类。问题是我必须编写自己的不可变 API,这可能非常重复:

class Debt(principalBalance: Double, name: String, endDate: LocalDate) {
def withNewPrincipalBalance(bal: Double) = new Debt(bal, name, endDate)
}

是否有更可扩展的方法来做到这一点?有我可以使用的编译器插件吗?

最佳答案

我不知道编译器插件,但您可以定义一个 copy 方法,就像使用命名参数与默认参数组合在案例类中生成的方法一样。

class Debt(principalBalance: Double, name: String, endDate: LocalDate) {
def copy(principalBalance: Double = principalBalance,
name: String = name,
endDate: LocalDate = endDate) = new Debt(principalBalance, name, endDate)
}

这不像每个属性的单独方法 (withNewPrincipalBalance) 那样重复,并且可以禁止更改某些值(例如创建日期)。

关于scala - 非案例类的“复制”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637283/

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