Questions tagged «immutability»

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

7
为什么我不应该使用不可变的POJO而不是JavaBean?
我现在已经实现了一些Java应用程序,到目前为止仅实现了桌面应用程序。我更喜欢使用不可变对象在应用程序中传递数据,而不是使用带有变量(setter和getter)的对象,也称为JavaBeans。 但是在Java世界中,使用JavaBeans似乎更为常见,而且我不明白为什么应该使用JavaBeans。就个人而言,如果代码仅处理不可变的对象而不是始终改变状态,则代码看起来会更好。 在项目15:最小化可变性,有效的Java 2ed中,还建议使用不可变的对象。 如果我有一个Person实现为JavaBean的对象,它将看起来像: public class Person { private String name; private Place birthPlace; public Person() {} public setName(String name) { this.name = name; } public setBirthPlace(Place birthPlace) { this.birthPlace = birthPlace; } public String getName() { return name; } public Place getBirthPlace() { return birthPlace; } } 并Person实现为不可变对象: …

8
互相引用的不可变对象?
今天,我试图将自己的头放在相互引用的不可变对象上。我得出的结论是,如果不使用惰性评估就无法做到这一点,但是在此过程中(我认为)我编写了此有趣的代码。 public class A { public string Name { get; private set; } public B B { get; private set; } public A() { B = new B(this); Name = "test"; } } public class B { public A A { get; private set; } public B(A a) { //a.Name …
77 c#  immutability 

5
有没有办法Object.freeze()一个JavaScript Date?
根据MDNObject.freeze()文档: 该Object.freeze()方法冻结对象:即,防止向其添加新属性;防止删除现有属性;并防止更改现有属性或其可枚举性,可配置性或可写性。本质上,对象实际上是不可变的。该方法返回被冻结的对象。 我期望在某个日期调用冻结会阻止对该日期进行更改,但是它似乎没有用。这是我正在做的事情(运行Node.js v5.3.0): let d = new Date() Object.freeze(d) d.setTime(0) console.log(d) // Wed Dec 31 1969 16:00:00 GMT-0800 (PST) 我本来希望致电setTime失败或不采取任何行动。任何想法如何冻结日期?


15
“ new String()”是否也是不变的?
我学习Java字符串已有一段时间了。以下问题基于以下帖子 Java String是Java中String的特殊 不变性 不可变性:现在,通过不可变性,已经设计了String类,以便可以在其他位置/变量中重用公共池中的值。如果将的String创建为 String a = "Hello World!"; 但是,如果我创建像 String b = new String("Hello World!"); 为什么这也是不变的?(或者是?)。由于它具有专用的堆内存,因此我应该能够在不影响任何其他变量的情况下对其进行修改。因此,从设计String的角度来看,还有其他原因为什么整体上是不变的?还是我的上述假设错了? 我想问的第二件事是关于通用字符串池的信息。如果我创建一个字符串对象为 String c = ""; 在池中创建一个空条目? 这些上已经有帖子了吗?如果是这样,有人可以共享链接吗?

5
Elixir变量真的不可变吗?
在Dave Thomas的《 Programming Elixir》一书中,他指出“ Elixir强制执行不可变数据”,并继续说: 在Elixir中,一旦变量引用了诸如[1,2,3]之类的列表,您就会知道它将始终引用那些相同的值(直到您重新绑定该变量)。 这听起来像“除非您进行更改,否则它永远不会更改”,因此我对可变性和重新绑定之间的区别感到困惑。突出差异的示例将非常有帮助。

8
.NET中System.String.Copy的用途是什么?
恐怕这是一个非常愚蠢的问题,但是我必须缺少一些东西。 为什么要使用String.Copy(string)? 文件说方法 创建一个新的String实例,该实例的值与指定的String相同。 由于.NET中字符串是不可变的,因此我不确定使用此方法有什么好处,因为我认为 string copy = String.Copy(otherString); 出于所有实际目的,似乎会产生与 string copy = otherString; 也就是说,除了正在进行的内部簿记操作之外,以及不ReferenceEquals将副本复制到otherString的事实之外,没有明显的区别-String是一个不变的类,其相等性基于值而不是标识。(感谢@Andrew Hare指出我最初的措词不够精确,无法表明我意识到Copying和not之间存在差异,但担心被认为缺乏有用的差异。) 当然,当传递null参数时,Copy会抛出一个ArgumentNullException,并且“新实例”可能会消耗更多的内存。后者似乎几乎没有好处,而且我不确定null检查是否有足够大的奖金来保证使用整个Copy方法。 谢谢。

7
在C#中,为什么不能在foreach循环中修改值类型实例的成员?
我知道值类型应该是不可变的,但这只是一个建议,而不是规则,对吗?那么为什么我不能做这样的事情: struct MyStruct { public string Name { get; set; } } public class Program { static void Main(string[] args) { MyStruct[] array = new MyStruct[] { new MyStruct { Name = "1" }, new MyStruct { Name = "2" } }; foreach (var item in array) { item.Name = …

3
C#是否(或将包括)副作用验证功能?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3个月前关闭。 改善这个问题 我知道C#得到了很多并行编程支持,但是AFAIK仍然没有用于副作用验证的结构,对吗? 我认为现在已经布局C#更加棘手。但是有计划将其纳入其中吗?还是F#是唯一具有副作用验证构造的.NET语言?

1
按键对ImmutableSortedDictionary范围进行枚举
我正在阅读有关C#的内容ImmutableSortedDictionary,System.Collections.Immutable并在考虑如何在程序中应用它。我非常喜欢C ++的lower_bound和upper_bound(请参阅此处),而我更希望看到某种范围查找。但是,文档中似乎缺少类似的方法。我想念什么吗?还是MS真正提供了分类字典,而没有有效访问分类范围?这似乎并不像可以对IEnumerable扩展方法那样对某个键进行某些操作,所以我有点困惑,因为我没有看到集合直接提供的某些功能。
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.