Tag: 不变性

设置System.Drawing.Color值

您好如何在System.Drawing.Color.G设置RGB值? 这就像System.Drawing.Color.G=255; 不允许,因为它只读 Property or indexer 'System.Drawing.Color.G' cannot be assigned toit is read only 我只需要通过分配自定义RGB值来创build一个Color对象

纯函数在C#中

我知道C#正在获得大量的并行编程支持,但是AFAIK仍然没有用于副作用validation的构造,对吧? 我认为现在已经布置了C#更复杂了。 但有没有计划让这个? 或者,F#是唯一一个构build了副作用validation的.NET语言?

Swift中的不可变/可变集合

我指的是Apple Swift编程指南,用于理解Swift语言中可变/不可变对象(数组,字典,集合,数据)的创build。 但是我不明白如何在Swift中创build一个不可变集合。 我想在Objective-C中的Swift中看到下面的等价物 不可变arrays NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; 可变数组 NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil]; [mArray addObject:@"Fourth"]; 不可变的词典 NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; 可变的字典 NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil]; [mDictionary setObject:@"Value3" forKey:@"Key3"];

有没有一种方法Object.freeze()的JavaScriptdate?

根据MDN Object.freeze()文档 : Object.freeze()方法冻结一个对象:也就是说,阻止新的属性被添加到它; 防止现有的属性被删除; 并防止现有属性或其可枚举性,可configuration性或可写性发生改变。 实质上,该对象是有效的不可变的。 该方法返回被冻结的对象。 我期待在一个date冻结呼叫将阻止该date的变化,但它似乎并没有工作。 这就是我在做什么(运行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要么失败,要么什么都不做。 任何想法如何冻结date?

“新的String()”是不可变的吗?

我一直在研究Java String。 以下问题是基于下面的post Javastring是特殊的 java中string的不变性 不变性:现在,通过不变性来deviseString类,以便公共池中的值可以在其他地方/variables中重用。 如果String创build为 String a = "Hello World!"; 不过,如果我创buildString就好 String b = new String("Hello World!"); 为什么这个不变呢? (或者是?)。 由于这有一个专用的堆内存,我应该能够修改这个不影响任何其他variables。 那么在devise上,为什么String作为一个整体被认为是不可变的? 或者我的上述假设是错误的? 我想问的第二件事是关于常见的string池 。 如果我创build一个string对象 String c = ""; 是在池中创build的空条目? 有没有任何职位已经在这些? 如果是这样,有人可以分享链接?

为什么我不应该使用不可变的POJO而不是JavaBeans?

现在我已经实现了一些Java应用程序,到目前为止只有桌面应用程序。 我更喜欢使用不可变对象来在应用程序中传递数据,而不是使用带有mutators(setter 和getters )的对象,也称为JavaBeans。 但在Java世界中,使用JavaBeans似乎更为常见,我不明白为什么要使用它们。 就个人而言,如果代码只处理不可变对象,而不是始终改变状态,代码看起来会更好。 在项目15:最小化可变性 , Effective Java 2ed中也build议使用不可变对象。 如果我有一个实现为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; } […]

互相引用的不可变对象?

今天,我正试图围绕不可变对象进行相互引用。 我得出的结论是,如果不使用懒惰的评估,你不可能做到这一点,但在我写这个(在我看来)有趣的代码的过程中。 public class A { public string Name { get; private set; } public BB { get; private set; } public A() { B = new B(this); Name = "test"; } } public class B { public AA { get; private set; } public B(A a) { //a.Name is null A = a; } […]

在Scala中val-mutable与var-immutable

在Scala中有没有关于什么时候对可变集合使用val与将不可变集合使用var的指导? 或者你应该真正的目标为val与一个不可改变的集合? collections这两种types的事实给了我很多的select,而且我经常不知道如何做出这样的select。

为什么JavaScript中的不变性如此重要(或需要)?

我目前正在研究React JS和React Native框架。 当我读到Facebook的Flux实现和Redux实现时,我遇到了Immutability或Immutable-JS库 。 问题是,为什么不变性如此重要? 什么是错误的变异对象? 它不是简单吗? 举一个例子,让我们考虑一个简单的新闻阅读器应用程序。 开幕式是新闻头条列表视图。 如果我最初设置一个带有值的对象数组 。 我无法操纵它。 这就是不变性原则所说的,对吗?(如果我错了,请纠正我)。 但是,如果我有一个新的新闻对象,必须更新? 通常情况下,我可以刚刚添加对象到数组中。 我在这种情况下如何实现? 删除商店并重新创build它? 是不是将一个对象添加到数组中一个更便宜的操作? PS:如果这个例子不是解释不变性的正确方法,请让我知道什么是正确的实际例子。 我正在努力学习这里的东西。 请赐教:)

构build大的,不可变的对象,而不使用具有长参数列表的构造函数

我有一些大的(超过3个领域)对象,可以而且应该是不可变的。 每当我遇到这种情况下,我倾向于用长参数列表创build构造函数可憎。 它感觉不对,难以使用和可读性受损。 如果这些字段是某种types的收集types,比如列表,则更为糟糕。 一个简单的addSibling(S s)将会很容易地减less对象的创build,但会使对象addSibling(S s)可变的。 你们在这种情况下使用什么? 我在Scala和Java,但我认为这个问题是语言不可知的,只要语言是面向对象的。 我能想到的解决scheme: “长参数列表的构造函数可憎” build造者模式 感谢您的input!