标签: immutability

什么是"冻结的字典"?

  • 冻结集是冻结集.
  • 冻结列表可以是元组.
  • 冻结的词典会是什么?一个不可变的,可洗的字典.

我想它可能是类似的collections.namedtuple,但这更像是一个冻结的词典(一个半冻结的词典).不是吗?

A"frozendict"应该是一个冰冻的字典,它应该有keys,values,get,等,并支持in,for等等.

python dictionary immutability data-structures

140
推荐指数
10
解决办法
7万
查看次数

无法修改返回值错误c#

我正在使用自动实现的属性.我想解决以下问题的最快方法是声明我自己的支持变量?

public Point Origin { get; set; }

Origin.X = 10; // fails with CS1612
Run Code Online (Sandbox Code Playgroud)

错误消息:无法修改'expression'的返回值,因为它不是变量

尝试修改作为中间表达式结果的值类型.由于该值未持久存在,因此该值将保持不变.

要解决此错误,请将表达式的结果存储在中间值中,或使用中间表达式的引用类型.

c# variables struct immutability

136
推荐指数
4
解决办法
8万
查看次数

无状态编程的优点?

我最近一直在学习函数式编程(特别是Haskell,但我也经历过关于Lisp和Erlang的教程).虽然我发现这些概念非常具有启发性,但我仍然没有看到"无副作用"概念的实际方面.它有什么实际优势?我试图在功能思维中思考,但是有些情况看起来过于复杂而没有能够以简单的方式保存状态(我不认为Haskell的monad'容易').

是否值得继续深入学习Haskell(或其他纯函数式语言)?功能性或无状态编程实际上是否比程序性更高效?我以后可能继续使用Haskell或其他功能语言,还是应该仅仅为了理解而学习它?

我更关心性能而不是生产力.所以我主要问的是我是否会在函数式语言中比在程序/面向对象/其他方面更高效.

state functional-programming immutability

127
推荐指数
8
解决办法
5万
查看次数

不可变地删除对象中的属性

我正在使用Redux.在我的reducer中,我试图从像这样的对象中删除一个属性:

const state = {
    a: '1',
    b: '2',
    c: {
       x: '42',
       y: '43'
    },
}
Run Code Online (Sandbox Code Playgroud)

我希望有这样的东西,而不必改变原始状态:

const newState = {
    a: '1',
    b: '2',
    c: {
       x: '42',
    },
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

let newState = Object.assign({}, state);
delete newState.c.y
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,它会删除两个州的财产.

可以帮我这么做吗?

javascript immutability redux

119
推荐指数
11
解决办法
6万
查看次数

如何创建不可变类?

我正在创建一个不可变的类.
我已将所有属性标记为只读.

我有一个课程列表.
虽然如果属性是只读的,则可以修改列表.

公开列表的IEnumerable使其不可变.
我想知道为了使一个类不可变而必须遵循的基本规则是什么?

.net c# immutability

108
推荐指数
5
解决办法
5万
查看次数

Java不可变集合

Java 1.6 Collection Framework文档:

不支持任何修改操作(例如add,removeclear)的集合称为不可修改.[...]另外保证Collection对象中的任何更改都不可见的集合称为不可变.

第二个标准让我感到困惑.鉴于第一个集合是不可修改的,并假设原始集合引用已被丢弃,第二行中引用的更改是什么?它是指集合中保存的元素的变化,即元素的状态?

第二个问题:
对于一个不可变的集合,如何提供额外的guarentees指定?如果一个线程更新了集合中元素的状态,那么在不可变集合的线程中,状态中的那些更新是不可见的,这对于不变性是否足够?

对于一个不可变的集合,如何提供额外的guarentees指定?

java collections immutability

108
推荐指数
5
解决办法
17万
查看次数

为什么C#禁止只读局部变量?

与同事就此进行了友好的辩论.我们对此有一些想法,但想知道SO人群对此有何看法?

c# language-design readonly immutability

107
推荐指数
7
解决办法
2万
查看次数

Swift make方法参数是否可变?

如何在不创建其他变量的情况下处理此错误?

func reduceToZero(x:Int) -> Int {
    while (x != 0) {
        x = x-1            // ERROR: cannot assign to 'let' value 'x'
    }
    return x
}
Run Code Online (Sandbox Code Playgroud)

我不想创建额外的变量来存储x的值.甚至可以做我想做的事情吗?

syntax immutability mutability swift

106
推荐指数
6
解决办法
5万
查看次数

使用ES6在Javascript中枚举

我正在用Javascript重建一个旧的Java项目,并意识到在JS中没有好的方法来做枚举.

我能想到的最好的是:

const Colors = {
    RED: Symbol("red"),
    BLUE: Symbol("blue"),
    GREEN: Symbol("green")
};
Object.freeze(Colors);
Run Code Online (Sandbox Code Playgroud)

const保持Colors被重新分配,并冷冻它防止突变的键和值.我正在使用符号,这Colors.RED是不等于0,或除了它自己之外的任何其他东西.

这个配方有问题吗?有没有更好的办法?


(我知道这个问题有点重复,但以前的Q/As都很老了,ES6给了我们一些新功能.)


编辑:

另一个解决序列化问题的解决方案,但我认为仍存在领域问题:

const enumValue = (name) => Object.freeze({toString: () => name});

const Colors = Object.freeze({
    RED: enumValue("Colors.RED"),
    BLUE: enumValue("Colors.BLUE"),
    GREEN: enumValue("Colors.GREEN")
});
Run Code Online (Sandbox Code Playgroud)

通过使用对象引用作为值,可以获得与Symbols相同的冲突避免.

javascript enums symbols immutability ecmascript-6

106
推荐指数
8
解决办法
8万
查看次数

什么是不可改变的意思?

如果字符串是不可变的,那是否意味着....(让我们假设JavaScript)

var str = 'foo';

alert(str.substr(1)); // oo

alert(str); // foo
Run Code Online (Sandbox Code Playgroud)

这是否意味着,当在字符串上调用方法时,它将返回修改后的字符串,但它不会更改初始字符串?

如果字符串是可变的,这是否意味着第二个alert()也会返回oo

javascript variables immutability

103
推荐指数
4
解决办法
4万
查看次数