Questions tagged «immutability»

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

8
不变是什么意思?
如果字符串是不可变的,那是否表示...。(假设使用JavaScript) var str = 'foo'; alert(str.substr(1)); // oo alert(str); // foo 这是否意味着在对字符串调用方法时,它将返回修改后的字符串,但不会更改初始字符串? 如果字符串是可变的,这是否意味着第二个alert()也将返回oo?

10
是整数不可变
我知道这可能很愚蠢,但是很多地方都声称Java中的Integer类是不可变的,但是下面的代码: Integer a=3; Integer b=3; a+=b; System.out.println(a); 毫无困难地执行(给出预期的结果)6。因此有效地改变了a的值。这不是说Integer是可变的吗?第二个问题和一点题外话:“不变的类不需要复制构造函数”。有人在乎解释原因吗?


9
无需使用具有长参数列表的构造函数即可构建大型的不可变对象
我有一些大对象(超过3个字段),它们可以并且应该是不变的。每次遇到这种情况时,我倾向于使用长参数列表创建构造函数可憎的对象。 感觉不对,很难使用,并且可读性受到影响。 如果字段是某种类型的集合类型(如列表),那就更糟了。一个简单的方法addSibling(S s)可以极大地简化对象的创建过程,但是使对象可变。 你们在这种情况下使用什么? 我使用的是Scala和Java,但我认为只要语言是面向对象的,问题就与语言无关。 我能想到的解决方案: “带有长参数列表的构造函数可憎” 建造者模式
96 java  oop  scala  immutability 

8
毫无变化地从物体上去除价值
在不更改原始对象的情况下,从特定键处的对象中删除值的一种好又短的方法是什么? 我想做类似的事情: let o = {firstname: 'Jane', lastname: 'Doe'}; let o2 = doSomething(o, 'lastname'); console.log(o.lastname); // 'Doe' console.log(o2.lastname); // undefined 我知道有很多用于此类任务的不变性库,但是我想在没有库的情况下摆脱困境。但是要做到这一点,将需要一种可以在整个代码中使用的简便方法,而又不将方法抽象为实用函数。 例如,要添加一个值,请执行以下操作: let o2 = {...o1, age: 31}; 这很短,容易记住,不需要实用程序功能。 有这样的东西来删除值吗?ES6非常受欢迎。 非常感谢你!

7
Swift中的不可变/可变集合
我指的是Apple的Swift编程指南,用于理解以Swift语言创建可变/不可变对象(数组,字典,集合,数据)。但是我不明白如何在Swift中创建一个不可变的集合。 我希望在Objective-C中看到以下Swift中的等效项 不变数组 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"];


8
在C#中替换多个字符串元素
有没有更好的办法做到这一点... MyString.Trim().Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace("/", "").ToLower(); 我已经扩展了字符串类,以将其简化为一项工作,但是有一种更快的方法吗? public static class StringExtension { public static string clean(this string s) { return s.Replace("&", "and").Replace(",", "").Replace(" ", " ") .Replace(" ", "-").Replace("'", "").Replace(".", "") .Replace("eacute;", "é").ToLower(); } } 只是为了好玩(并停止评论中的论点),我已提拔要点,对以下各种示例进行基准测试。 https://gist.github.com/ChrisMcKee/5937656 regex选项的得分非常高;字典选项出现最快;stringbuilder replace的长发版本比短手稍快。

1
Redux不只是美化了全球状态吗?
所以我一周前开始学习React,我不可避免地遇到了状态问题以及组件应该如何与应用程序的其余部分进行通信。我四处搜寻,Redux似乎是本月的风土人情。我通读了所有文档,我认为这实际上是一个非常革命性的想法。这是我的想法: 人们普遍认为状态是非常邪恶的,并且是编程中大量错误的来源。Redux并未将所有内容分散在整个应用程序中,而是为什么不将所有内容都集中在必须发出更改操作的全局状态树中?听起来不错。所有程序都需要状态,因此让我们将其停留在一个不纯净的空间中,并仅在该空间内对其进行修改,以便轻松查找错误。然后,我们还可以声明性地将各个状态块绑定到React组件,并使它们自动重绘,并且一切都很好。 但是,我对整个设计有两个问题。首先,为什么状态树需要不可变?说我不在乎时间旅行调试,热重装,并且已经在我的应用程序中实现了撤消/重做。要做这件事似乎很麻烦: case COMPLETE_TODO: return [ ...state.slice(0, action.index), Object.assign({}, state[action.index], { completed: true }), ...state.slice(action.index + 1) ]; 代替这个: case COMPLETE_TODO: state[action.index].completed = true; 更不用说我正在制作一个在线白板以学习,每个状态更改都可能像在命令列表中添加笔刷一样简单。一段时间后(数百个笔触),复制整个阵列可能开始变得非常昂贵和费时。 我可以接受一个全局状态树,该状态树与通过操作进行更改的UI无关,但是它真的需要不可变吗?像这样的简单实现有什么问题(草稿很粗。写在1分钟内)? var store = { items: [] }; export function getState() { return store; } export function addTodo(text) { store.items.push({ "text": text, "completed", false}); …




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

9
可哈希的,不可变的
从最近的一个SO问题(请参阅在python中创建由列表索引的字典)中,我意识到我可能对python中可哈希和不可变对象的含义有错误的理解。 在实践中,hashable是什么意思? 可哈希和不可修改之间有什么关系? 是否存在可哈希的可变对象或不可哈希的不可变对象?


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.