Questions tagged «immutability»

不变性是指数据创建后无法修改。而是通过复制数据进行修改。不变数据的一个特性是它是“参照透明的”。

7
不可变与不可修改的集合
从集合框架概述中: 类别不支持修改操作(如add,remove和clear)被称为不可修改的。不可修改的集合是可修改的。 额外保证Collection对象的任何变化都不可见的集合称为不可变的。不变的集合是可变的。 我不明白区别。这里不可修改和不可变 之间有什么区别?

13
如何避免API设计中的“参数过多”问题?
我有这个API函数: public ResultEnum DoSomeAction(string a, string b, DateTime c, OtherEnum d, string e, string f, out Guid code) 我不喜欢 因为参数顺序变得不必要地重要。添加新字段变得越来越困难。很难看到正在传递的内容。很难将方法重构为较小的部分,因为这会带来在子函数中传递所有参数的另一项开销。代码更难读。 我想到了一个最明显的想法:让一个对象封装数据并将其传递,而不是一个个地传递每个参数。这是我想出的: public class DoSomeActionParameters { public string A; public string B; public DateTime C; public OtherEnum D; public string E; public string F; } 这使我的API声明减少为: public ResultEnum DoSomeAction(DoSomeActionParameters parameters, out …

14
Java中的不可变数组
有没有Java原始数组的不变选择?制作一个原始数组final实际上并不能阻止人们做类似的事情 final int[] array = new int[] {0, 1, 2, 3}; array[0] = 42; 我希望数组的元素不可更改。

14
什么是“冻结命令”?
冻结集是冻结集。 冻结列表可能是一个元组。 冻结的字典是什么?一个不变的,可哈希的字典。 我猜可能是collections.namedtuple,但是更像是冰冻的字典(半冻结​​的字典)。是不是 A“frozendict”应该是一个冰冻的字典,它应该有keys,values,get,等,并支持in,for等等。 更新: *它是:https : //www.python.org/dev/peps/pep-0603

8
错误:“无法修改返回值” c#
我正在使用自动实现的属性。我猜想解决以下问题的最快方法是声明我自己的后备变量? public Point Origin { get; set; } Origin.X = 10; // fails with CS1612 错误消息:无法修改“表达式”的返回值,因为它不是变量 试图修改作为中间表达式结果的值类型。因为该值不是持久性的,所以该值将保持不变。 若要解决此错误,请将表达式的结果存储在中间值中,或对中间表达式使用引用类型。

15
不变地删除对象中的属性
我正在使用Redux。在我的reducer中,我试图从这样的对象中删除一个属性: const state = { a: '1', b: '2', c: { x: '42', y: '43' }, } 我想拥有这样的东西而不必改变原始状态: const newState = { a: '1', b: '2', c: { x: '42', }, } 我试过了: let newState = Object.assign({}, state); delete newState.c.y 但是由于某些原因,它会同时从两个状态中删除该属性。 能帮我做到吗?

13
ES6中的Java枚举
我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有很好的枚举方法。 我能想到的最好的是: const Colors = { RED: Symbol("red"), BLUE: Symbol("blue"), GREEN: Symbol("green") }; Object.freeze(Colors); 的const保持Colors被重新分配,并冷冻它防止突变的键和值。我正在使用Symbols,所以它Colors.RED不等于0或除自身以外的其他任何符号。 这种配方有问题吗?有没有更好的办法? (我知道这个问题有点重复,但是以前的所有Q / A都已经很老了,ES6为我们提供了一些新功能。) 编辑: 另一个解决序列化问题的解决方案,但我认为仍然存在领域问题: const enumValue = (name) => Object.freeze({toString: () => name}); const Colors = Object.freeze({ RED: enumValue("Colors.RED"), BLUE: enumValue("Colors.BLUE"), GREEN: enumValue("Colors.GREEN") }); 通过使用对象引用作为值,您将获得与Symbols相同的避免碰撞的功能。

8
无状态编程的优势?
我最近一直在学习函数式编程(特别是Haskell,但是我也阅读了有关Lisp和Erlang的教程)。虽然我发现这些概念很有启发性,但我仍然看不到“无副作用”概念的实际方面。它的实际优势是什么?我试图从功能的思维方式进行思考,但是有些情况似乎过于复杂,而无法以简单的方式保存状态(我不认为Haskell的monad是“简单的”)。 值得继续深入学习Haskell(或另一种纯功能语言)吗?函数式或无状态编程实际上比过程式生产率更高吗?以后我可能会继续使用Haskell或其他功能语言,还是应该仅出于理解目的学习它? 我更关心性能而不是生产力。所以我主要是在问我是否会比在过程/面向对象/什么方面的语言在功能语言上更有效率。

7
Swift使方法参数可变吗?
如何在不创建其他变量的情况下处理此错误? func reduceToZero(x:Int) -> Int { while (x != 0) { x = x-1 // ERROR: cannot assign to 'let' value 'x' } return x } 我不想创建其他变量只是为了存储x的值。有可能做我想做的事吗?

10
推入状态数组的正确方法
我似乎在将数据推入状态数组时遇到问题。我正在尝试以这种方式实现它: this.setState({ myArray: this.state.myArray.push('new value') }) 但是我相信这是不正确的方式,并导致可变性问题?


6
Java不可变集合
从Java 1.6 Collection Framework文档中: 不支持任何修改操作(如类别add,remove和clear)被称为不可修改的。[...]额外保证Collection对象中的任何更改都将不可见的collection被称为不可变的。 第二个标准使我有些困惑。鉴于第一个集合是不可修改的,并且假定原始集合引用已被删除,那么第二行中提到的更改是什么?它是指集合中包含的元素的变化,即元素的状态吗? 第二个问题: 要使集合不可变,该如何提供指定的其他保证人?如果集合中元素的状态由线程更新,那么对于不可变是否足以使状态中的那些更新在保存不可变集合的线程上不可见? 为了使集合不可变,如何提供指定的附加保证?

6
如何创建不可变的类?
我正在创建一个不可变的类。 我已将所有属性标记为只读。 我在班上有一个项目清单。 尽管如果该属性为只读,则可以修改列表。 公开列表的IEnumerable使其不可变。 我想知道使一类不变的基本规则是什么?
113 c#  .net  immutability 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.