Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala案例类:在.copy()调用中将字段重置为默认值_Scala_Case Class - Fatal编程技术网

Scala案例类:在.copy()调用中将字段重置为默认值

Scala案例类:在.copy()调用中将字段重置为默认值,scala,case-class,Scala,Case Class,我想跟踪自上次更新以来是否“检查”了case class。这意味着在每次“检查”后将布尔标志翻转到true,并在更新案例类后(通过.copy调用)将布尔标志翻转回false。然而,我不知道如何做后一部分 那么,如何在每次更新后(例如,.copy调用)将案例类中的布尔标志重置为false 我有两个解决方案: 在代码库的每个位置手动更改标志:在每个调用中添加checked=false。(这个解决方案看起来很糟糕,因为有人可以创建.copy而不重置我的标志。此外,在一个代码库中有数百个.copy()调

我想跟踪自上次更新以来是否“检查”了
case class
。这意味着在每次“检查”后将布尔标志翻转到
true
,并在更新
案例类
后(通过
.copy
调用)将布尔标志翻转回
false
。然而,我不知道如何做后一部分

那么,如何在每次更新后(例如,
.copy
调用)将
案例类中的布尔标志重置为
false

我有两个解决方案:

  • 在代码库的每个位置手动更改标志:在每个
    调用中添加
    checked=false
    。(这个解决方案看起来很糟糕,因为有人可以创建.copy而不重置我的标志。此外,在一个代码库中有数百个
    .copy()
    调用)
  • 添加默认参数设置为false的var。这样,在每次调用
    .copy()
    时,它将被重置:
  • 第二个似乎更好,但我不太喜欢
    case类中的这种可变性


    在不引入
    var

    的情况下,是否有其他方法(覆盖
    .copy()
    ?)来获得类似的结果?您是否意识到
    copy
    正在创建一个新类?因此,即使修改旧实例中的变量,通常也会使用新实例。现在还不清楚你到底想要什么,为什么。我确实意识到了这一点。这就是为什么使用
    var
    的技巧会奏效的原因。所以您想检查一下您的案例类中是否有名为
    copy
    的人?为什么?这听起来像是XY问题。使用自动生成的方法是不可能的。您可以实现自己的
    .copy
    ,这将有一些逻辑,尽管这看起来您想要的是一个普通类,而不是一个不可变的case类。@Yevhenipopadiuk实际上,您似乎不想要一个不可变的case类,而是一个可变的类,因为您似乎不想创建该类的副本,您想修改它的内容。-在任何情况下,我都可能建议在类之外设置checked标志(或者至少在参与者之外不可见)。
    case class A(..., checked: Boolean)
    
    // somewhere in the code
    a.copy(..., checked = false)
    
    
    case class A(...) {
     var checked: Boolean = false
    }