immutability相关内容

为什么 Redux 中的对象应该是不可变的?

为什么 Redux 中的对象应该是不可变的?我知道某些框架(例如 Angular2)将使用 onPush 并且可以利用不变性来比较视图状态以加快渲染速度,但我想知道是否还有其他原因,因为 Redux 与框架无关,但它在自己的文档中提到要使用不变性(与框架无关). 感谢任何反馈. 解决方案 Redux 是一个将状态表示为(不可变)对象的小型库.新状态通过将当前状态传递给纯函数来创建全新 ..
发布时间:2021-12-21 18:18:05 前端开发

Haskell 有变量吗?

我经常听到声称 Haskell 没有变量;特别是,这个答案声称它没有't,并且它至少被点赞了 9 次并被接受. 那么它有没有变量,为什么? 这个问题似乎也适用于 ML、F#、OCaml、Erlang、Oz、Lava 和所有 SSA 中级语言. 解决方案 Haskell 默认有不可变变量(数学意义上的变量): foo x y = x + y * 2 默认情况下,变量不是可变 ..

错误:“无法修改返回值"C#

我正在使用自动实现的属性.我想解决以下问题的最快方法是声明我自己的支持变量? public Point Origin { get;放;}原点.X = 10;//使用 CS1612 失败 错误信息:无法修改“表达式"的返回值,因为它不是一个变量 尝试修改作为结果的值类型中间表达.因为值不是持久化的,所以值将保持不变. 要解决此错误,请将表达式的结果存储在中间值,或使用中间值的引用类型 ..
发布时间:2021-12-13 20:41:56 C#/.NET

Allen Holub 写道“你永远不应该使用 get/set 函数",他说得对吗?

Allen Holub 写道, 没有耦合就没有程序.尽管如此,您可以通过严格遵循 OO(面向对象)规则(最重要的是对象的实现应该对使用它的对象完全隐藏)来大大减少耦合.例如,对象的实例变量(不是常量的成员字段)应该始终是私有的.时期.没有例外.曾经.我是认真的.(您偶尔可以有效地使用受保护的方法,但受保护的实例变量是令人厌恶的.) 这听起来很有道理,但他接着说, 出于同样的原因, ..
发布时间:2021-12-12 08:11:06 其他开发

Kotlin 实例化不可变列表

我已经开始使用 Kotlin 作为 Java 的替代品并且非常喜欢它.但是,如果不跳回 java-land,我一直无法找到解决方案: 我有一个 Iterable 并且需要将它转换为一个列表,以便我可以多次迭代它.这是一个不可变列表的明显应用,因为我需要做的就是多次阅读它.但是,我如何在开始时将该数据实际放入列表中?(我知道它是一个接口,但我一直无法在文档中找到它的实现) 可能的(如果不 ..
发布时间:2021-12-10 17:34:38 其他开发

什么是“冻结的字典"?是?

冻结集是冻结集. 冻结列表可以是元组. 冻结的字典会是什么?一个不可变的、可散列的字典. 我想它可能类似于 collections.namedtuple,但这更像是一个冻结键的字典(半冻结​​的字典).不是吗? 一个“frozendict"应该是一个冻结的字典,它应该有keys、values、get等,并且支持in、for 等 更新: * 它是:https://www.py ..
发布时间:2021-12-10 15:48:43 Python

scala 类构造函数参数

有什么区别: class Person(name: String, age: Int) {def say =“我的名字是"+名字+“,年龄"+年龄} 和 class Person(val name: String, val age: Int) {def say =“我的名字是"+名字+“,年龄"+年龄} 我可以将参数声明为 vars,然后再更改它们的值吗?例如, class Person ..
发布时间:2021-12-07 13:33:12 其他开发

Scala 中的 val-mutable 与 var-immutable

Scala 中是否有关于何时将 val 与可变集合一起使用与将 var 与不可变集合一起使用的指南?或者你真的应该用不可变集合来实现 val 吗? 事实上,这两种类型的收藏给了我很多选择,而我通常不这样做知道如何做出选择. 解决方案 很常见的问题,这个.困难的是找到重复项. 您应该争取参考透明度.这意味着,如果我有一个表达式“e",我可以创建一个 val x = e,并将 e ..

不可变容器内的可变类型

我对修改元组成员有点困惑.以下不起作用: >>>东西 = (['a'],)>>>东西[0] = ['b']类型错误:“元组"对象不支持项目分配>>>事物(['一种'],) 但这确实有效: >>>东西[0][0] = 'b'>>>事物(['b'],) 也有效: >>>thing[0].append('c')>>>事物(['b', 'c'],) 不起作用,但有效(嗯?!): ..
发布时间:2021-12-06 13:55:22 Python

为什么元组可以包含可变项?

如果元组是不可变的,那么为什么它可以包含可变项? 当一个可变项(如列表)被修改时,它所属的元组保持不可变,这似乎是一个矛盾. 解决方案 这是一个很好的问题. 关键的见解是元组无法知道其中的对象是否可变.使对象可变的唯一方法是拥有改变其数据的方法.一般来说,没有办法检测到这一点. 另一个见解是 Python 的容器实际上不包含任何内容.相反,它们保留对其他对象的引用.同样, ..
发布时间:2021-12-06 13:43:06 Python

DeepReadonly 对象打字稿

可以像这样创建 DeepReadonly 类型: type DeepReadonly= {readonly [P in keyof T]: DeepReadonly;};接口A{B: { C: 号码;};D:{ E:数字;}[];}const myDeepReadonlyObject:DeepReadonly= {乙:{丙:1},D: [ { E: 2 } ],}myDeepReadonlyOb ..
发布时间:2021-12-05 16:04:21 其他开发

Python 字符串不是不可变的吗?那么为什么一个 + ""+ 工作?

我的理解是 Python 字符串是不可变的. 我尝试了以下代码: a = "狗"b = "吃"c = "款待"打印 a, b, c#狗吃零食打印 a + " " + b + " " + c#狗吃零食打印一个# 狗a = a + " " + b + " " + c打印一个#狗吃零食#!!! Python 不应该阻止赋值吗?我可能遗漏了一些东西. 有什么想法吗? 解决方案 第一 ..
发布时间:2021-12-05 15:03:01 Python

关于不可变字符串的变化id

关于str 类型对象的id(在python 2.7 中)的一些问题让我感到困惑.str 类型是不可变的,所以我希望一旦它被创建,它就会始终具有相同的 id.我觉得我自己表达的不太好,所以我会贴一个输入和输出序列的例子. >>>id('所以')140614155123888>>>id('所以')140614155123848>>>id('所以')140614155123808 所以与此同时, ..
发布时间:2021-12-05 14:33:41 Python

为什么在 Ruby 方法中使用感叹号?

在 Ruby 中,有些方法有一个问号 (?),它会问像 include? 这样的问题,询问是否包含有问题的对象,然后返回一个 true/假. 但是为什么有些方法有感叹号 (!) 而其他方法没有? 什么意思? 解决方案 一般来说,以 ! 结尾的方法表示该方法将修改调用它的对象.Ruby 将这些称为“危险方法",因为它们会更改其他人可能引用的状态.下面是一个简单的字符串示例: f ..
发布时间:2021-12-03 09:28:02 其他开发

如何在 Python 中创建不可变对象?

虽然我从来不需要这个,但让我震惊的是,在 Python 中创建一个不可变的对象可能有点棘手.你不能只是覆盖 __setattr__,因为那样你甚至不能在 __init__.子类化元组是一个有效的技巧: 类不可变(元组):def __new__(cls, a, b):返回元组.__new__(cls, (a, b))@财产定义一个(自我):返回自己[0]@财产定义 b(自我):回归自我[1]def ..
发布时间:2021-12-02 16:42:43 Python

推入状态数组的正确方法

我似乎在将数据推入状态数组时遇到问题.我正在尝试以这种方式实现它: this.setState({ myArray: this.state.myArray.push('new value') }) 但我认为这是不正确的方法并会导致可变性问题? 解决方案 数组推送返回长度 this.state.myArray.push('new value') 返回扩展数组的长度,而不是数组本身. ..
发布时间:2021-12-02 10:05:56 前端开发

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

我目前正在研究 React JS 和 React Native 框架.在中途我遇到了 Immutability 或 Immutable-JS 库,当时我正在阅读有关Facebook 的 Flux 和 Redux 实现. 问题是,为什么不变性如此重要?改变对象有什么问题?这不是让事情变得简单吗? 举个例子,让我们考虑一个简单的新闻阅读器应用,其打开屏幕是新闻标题的列表视图. 如果我 ..

JavaScript 中的常量:何时使用它,是否有必要?

我最近遇到了const JavaScript 中的关键字.据我所知,它用于创建不可变变量,以及我已经测试以确保它不能被重新定义(在 Node.js 中): const x = 'const';const x = '非常量';//会报错:'constant 'x' has been defined' 我意识到它还没有在所有浏览器中标准化 - 但我只对 Node.js V8,我注意到某些 开发人员 ..
发布时间:2021-12-01 21:44:32 前端开发