immutability相关内容

如何创建和初始化不可变数组?

我想创建一个数组.我不需要数组是可变的,并且在创建时,我拥有计算数组第 i 个成员所需的所有信息.但是,不知道如何在 Rust 中创建不可变数组. 这是我现在所拥有的: 让 mut my_array: [f32;4] = [0.0;4];因为我在 0..4 {//一些计算,具体是什么并不重要my_array[i] = some_function(i);} 这就是我想要的: 让 my_a ..
发布时间:2021-11-18 04:38:46 其他开发

为什么不使用带有扩展运算符的 splice 从数组中删除项目以进行反应?

splice()改变原始数组,应该避免.相反,一个不错的选择是使用 filter() 创建一个新数组,因此不会改变状态.但我曾经使用 splice() 和扩展运算符从数组中删除项目. removeItem = index =>{const items = [...this.state.items];items.splice(index, 1);this.setState({ items });} ..
发布时间:2021-11-18 04:37:51 前端开发

从 JS 中的不可变数组中删除元素的最干净的方法是什么?

我需要从作为 React 组件状态的数组中删除一个元素.这意味着它是一个不可变的对象. 使用展开语法可以轻松添加元素. 返回 {...状态,位置:[...state.locations, {}]}; 删除有点棘手.我需要使用一个中间对象. var l = [...state.locations]l.splice(索引,1)返回 {...状态,地点:l} 它使代码更脏,更难理解. ..
发布时间:2021-11-18 04:10:32 前端开发

.NET 中是否可以使用不可变数组?

是否有可能以某种方式将 System.Array 标记为不可变的.当放在 public-get/private-set 后面时,它们不能被添加到,因为它需要重新分配和重新分配,但消费者仍然可以设置他们想要的任何下标: 公共类 Immy{公共字符串[] { 获取;私人订制;}} 我认为 readonly 关键字可能会奏效,但没有这样的运气. 解决方案 ReadOnlyCollection ..
发布时间:2021-11-18 03:04:51 C#/.NET

Javascript:长度方法有效吗?

我正在做一些 javascript 编码,我想知道长度方法是“预先计算"的,还是被 JS 引擎记住了. 所以,问题是: 如果我经常检查数组长度,并假设我没有改变它(通过闭包使其不可变),我是否应该预先计算长度方法并将其存储在某个变量中? 谢谢! 解决方案 所有主要的解释器都为本地数组的长度提供了有效的访问器,但不是像 NodeLists. “Javascript 中 ..
发布时间:2021-11-18 03:01:19 前端开发

在 Python 中使用列表扩展的意外行为

我试图了解扩展在 Python 中的工作原理,但它并没有完全按照我的预期工作.例如: >>>a = [1, 2, 3]>>>b = [4, 5, 6].extend(a)>>>乙>>> 但我会预料到: [4, 5, 6, 1, 2, 3] 为什么返回 None 而不是扩展列表? 解决方案 extend() 方法追加到现有数组并返回 None.在您的情况下,您正在动态创建一个数组 ..
发布时间:2021-11-18 02:20:48 Python

Swift:配对数组元素的最佳方式是什么

我遇到了一个需要成对迭代数组的问题.做到这一点的最佳方法是什么?或者,作为替代方案,将 Array 转换为成对数组(然后可以正常迭代)的最佳方法是什么? 这是我得到的最好的.它要求 output 是一个 var,它不是很漂亮.有没有更好的办法? 让输入 = [1, 2, 3, 4, 5, 6]var 输出 = [(Int, Int)]()for i in stride(from: 0, t ..
发布时间:2021-11-18 02:18:51 移动开发

不可变的 numpy 数组?

有没有一种简单的方法可以创建一个不可变的 NumPy 数组? 如果必须从 ndarray 派生一个类来实现这一点,那么为了实现不变性而必须重写的最少方法集是什么? 解决方案 您可以使 numpy 数组不可写: a = np.arange(10)a.flags.writeable = False[0] = 1# Gives: ValueError: 赋值目标是只读的 另见此线程中的 ..
发布时间:2021-11-18 02:05:57 Python

Java中的不可变数组

Java 中的原始数组有不可变的替代品吗?制作一个原始数组 final 实际上并不会阻止一个人做类似 的事情 final int[] array = new int[] {0, 1, 2, 3};数组[0] = 42; 我希望数组的元素是不可更改的. 解决方案 不适用于原始数组.您需要使用 List 或其他一些数据结构: Listitems = Collections.unmodi ..
发布时间:2021-11-18 01:15:27 Java开发

R:选择子集而不复制

有没有办法从对象(数据框、矩阵、向量)选择子集而无需复制所选数据? 我处理相当大的数据集,但从不更改它们.然而,为了方便起见,我经常选择数据的子集进行操作.每次复制一个大子集的内存效率非常低,但是正常索引和 subset(以及因此 xapply() 函数系列)都会创建所选数据的副本.所以我正在寻找可以克服这个问题的函数或数据结构. 一些可能适合我的需求并希望在一些 R 包中实现的方法: ..
发布时间:2021-11-16 23:01:50 其他开发

为什么 HttpClient API 的大多数类都定义了不可变对象?

HttpClient 文档 陈述了以下关于不变性的内容: 拦截器的存在是为了检查和改变传出的请求和传入的响应.然而,得知这一点可能会令人惊讶HttpRequest 和 HttpResponse 类在很大程度上是不可变的. 这是有原因的:因为应用可能会重试请求,拦截器链可以多次处理单个请求.如果请求是可变的,重试的请求将不同于原始请求.不变性确保拦截器看到相同请求每次尝试. 我觉得 ..
发布时间:2021-11-09 01:36:34 其他开发

Angular 2 Components:如何处理循环输入和输出

现状: 我有一个 parent 和一个 child 组件. parent 使用它的 @Input 初始化 child 的数据.当用户使用 @Output 编辑数据时,child 通知父级.由于数据是不可变的,child 必须将数据与该通知一起发送. 当 parent 收到通知时,它会检查提交的数据是否有效,然后设置它(这也会将新值传播到其他一些子组件). 问题: 在p ..

Python 中的元组是不可变的吗?

它说 元组一旦创建就不能以任何方式更改. 但是当我执行以下操作时: t1=(4,5,8,2,3)t1=t1+(7,1)打印(t1) 元组正在更改为 (4, 5, 8, 2, 3, 7, 1);这是为什么?“元组不可变"的真正含义是什么? 解决方案 是的,元组是不可变的;一旦创建,就无法更改.t1=t1+(7,1) 创建一个新元组并将其分配给名称t1.它不会更改最初由该名称引 ..
发布时间:2021-09-10 20:09:43 Python

了解Python中对类对象的可变性和多变量分配

我正在寻找有关可变性和类对象的一些说明.据我了解,Python中的变量是关于为对象分配变量名的. 如果该对象是不可变的,则当我们将两个变量设置为同一对象时,它将是两个单独的副本(例如a = b = 3,所以更改为4不会影响b,因为3是一个数字,例如不变的对象). 但是,如果对象是可变的,则更改一个变量赋值的值自然会更改另一个变量赋值(例如a = b = []-> a.append(1) ..
发布时间:2021-05-15 20:45:46 Python

参考和盒子之间的可变性差异

我试图了解Rust指针类型及其与可变性的关系.具体来说,声明一个变量的方法,该变量持有指针并且本身是可变的-即可以指向其他内存,并且声明数据本身是可变的-即可以更改通过指针变量的值. 这就是我理解普通引用工作的方式: 让mut a =& 5;//a是指向不变数据的可变指针令b =& mut 5;//b是指向可变数据的不变指针 因此, a 可以更改为指向其他内容,而 b 则不能.但是, ..
发布时间:2021-05-15 20:45:37 其他开发

将String类型引用标记为Volatile安全吗?

我已经阅读了一些文章和文章,说我们不应该将Java对象声明为volatile,因为结果是,只有引用才变成volatile.以下是一些示例: 链接-1 链接2 链接3 Sonar的建议是“非原始字段不应该是“易失性的"",但是,它也表明所描述的问题涉及可变对象“类似地,将可变对象字段标记为volatile意味着对象引用是易变的,但是对象本身不是'. 我的问题是:将Java Stri ..
发布时间:2021-05-15 20:45:34 Java开发