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); } } 您可以像案例类中的复制方法一样使用。命名和默认参数是非常有用的功能,不仅仅是复制方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读