加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala是否具有创建不可变数据结构的修改克隆的更新语法?

发布时间:2020-12-16 09:30:55 所属栏目:安全 来源:网络整理
导读:在水星我可以使用: A = B^some_field := SomeValue 将A绑定到B的副本,除了some_field是SomeValue,而不是在B中的任何东西。我相信Haskell的等价物是这样的: a = b { some_field = some_value } Scala有这样的“修改”不变值。替代方案似乎是有一个直接设
在水星我可以使用:

A = B^some_field := SomeValue

将A绑定到B的副本,除了some_field是SomeValue,而不是在B中的任何东西。我相信Haskell的等价物是这样的:

a = b { some_field = some_value }

Scala有这样的“修改”不变值。替代方案似乎是有一个直接设置实例中的每个字段的构造函数,这并不总是理想的(如果有构造函数应该维护的invarients)。此外,如果我必须明确传递我想要修改的副本的实例中的所有其他值,那么它将是非常笨重和更脆弱的。

我没有通过谷歌搜索找到任何内容,或者在对语言参考手册或“Scala By Example”的简短调查(我已经阅读完毕,但尚未吸收所有内容,因此可能会好在那里)。

我可以看到,这个功能可能会与Java风格的访问保护和子类有一些奇怪的交互,但…

解决方法

您可以使用案例类,但您不必。案例类不是什么神奇的 – 修饰符例子只是节省了大量的打字。
复制方法是通过使用命名和默认参数实现的。名称与字段相同,默认值是字段的当前值。以下是一个例子:

class ClassWithCopy(val field1:String,val field2:Int) {
    def copy(field1:String = this.field1,field2:Int = this.field2) = {
        new ClassWithCopy(field1,field2);
    }
}

您可以像案例类中的复制方法一样使用。命名和默认参数是非常有用的功能,不仅仅是复制方法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读