首页 > TAG信息列表 > immutability

软件构造--immutability mutability的区别简述

最后阶段还是对可变性这里不是很理解,在这总结一下: Immutability 不变性,是key design principle 不变数据类型:一旦被创建,其值就不能被改变 String是典型的不变类型,每次改变的时候实际上都是new了一个新的String。 对比之下,StringBuilder是字符串的可变类,修改的时候不会创建新的变量

Mutability和Immutability

改变变量:使变量指向存储着另一个值的空间 改变变量的值:变量指向的空间不变,变化的是存储的内容。 Immutability:不变性,一个重要的设计原则,设计ADT时尽量保证这个原则。 Immutable types:不可变的数据类型,当实例对象被创建以后,该对象的值就不可变化了,也就是该ADT中不能有mutator

(二十二) Immutability模式:如何利用不变性解决并发问题?

我们曾经说过,“多个线程同时读写同一共享变量存在并发问题”,这里的必要条件之一是读写,如果只有读,而没有写,是没有并发问题的。 解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutabili

python-为什么两个单独创建的不可变对象具有相同的id,而可变对象却具有不同的含义,而它们都引用相同的值?

这个问题已经在这里有了答案:            >            What’s with the Integer Cache inside Python?                                    1个两个单独创建的可变列表具有不同的ID. Python SHELL :(可变) >>> myli

为什么标记为final的对象可以被修改并在Java中调用非final方法?

我是Java的新手,我来自C背景. 我以为Java中的final就像C中的const一样工作,但我想不是. 在C中以const初始化的对象只能调用const方法,而不能更改对象中的字段. 但是在下面的代码中,我可以为pet赋值.即pet.id = new ObjectId(newPetId);. private void addPet() { progressBar.

用Java完全初始化不可变对象后,它们会被发布吗?

我正在阅读Fred Long撰写的Java Concurrency Guidelines中有关不可变对象和线程安全性的文章. 这是本书中的代码片段. // Immutable Helper public final class Helper { private final int n; public Helper(int n) { this.n = n; } // ... } // and a

另一个“为什么结构不可变?” C#

我读了 When should I use a struct instead of a class?引用了MSDN的指导,其中指出: Do not define a structure unless the type has all of the following characteristics: It logically represents a single value, similar to primitive types (integer, double, and

java-不可变中的可变项

当我们使用Immutable objects库创建不可变类时,如何处理可变成员(例如j.u.Date)? 注意:这与java Date类无关,并且与Immutable Objects java库完全相关,后者会生成一些代码! 例: @Value.Immutable public interface MyImmutableClass { Date creationDateTime(); } 有没有一种方法

用于加强自定义类型不变性的Python元类

在寻找一种实现自定义类型不变性的方法之后,并没有找到令人满意的答案,我想到了自己以元类形式提出的解决方案: class ImmutableTypeException( Exception ): pass class Immutable( type ): ''' Enforce some aspects of the immutability contract for new-style classes:

c#-当在“假设分析”工具中使用实例时,不可变类合适吗?

我有一个基本上代表模型参数的类,并封装了使用这些参数计算模型值的逻辑.我正在尝试确定此类是否应该不变.在实践中,将通过拟合某些数据集来生成模型实例,因此从某种意义上说(至少对我而言)该实例是不可变的,因为它与外部数据相关. 另一方面,将有一个GUI允许用户执行“假设分析”,

Java防御性复制和不可变

为什么必须进行防御性复制才能实现不可变类? 看下面的代码: public final class EmailMessage { private final String from; private final String to; private final String message; private final Date date; public EmailMessage( String from, Strin

javascript-通过解构从对象中删除键的不变性

我有一个具有简化结构的对象,如下所示: state = { todo: { 1: {text: 'Buy apples'}, 2: {text: 'Buy milk'} } } 如果我想删除待办事项的不变性,根据Stack Overflow上的其他答案,我可以分解待办事项的列表: const idToDelete = 2 let { [idToDelete]: deleted,

Kotlin / Java在地图中收集地图的功能和不变方法

目前,我正在通过Java API读取文件,并通过foreach方法将某些项目添加到地图中,这迫使我不得不使用mutablemap.有没有没有可变映射的项目收集方法?我知道有一个方法collect,但无法正常工作. 当前方式: val result = mutableMapOf<Int, MutableMap<Int, Double>>() Files.lines

javascript-如何使我的React状态立即更新?

我所做的旨在更新状态的功能无法完美运行. 我对当前状态进行了深度修改,然后将其设置为更改后的状态.我决定在副本上运行一个简单的地图,并更新数组中每个对象的属性,这使应用程序立即处于更新状态并显示更改. (以下代码未显示,我刚刚尝试过) 但这不适用于我真正想要对副本进行的修

javascript-不可变的备注-有可能吗?

我正在尝试使前端堆栈在功能上尽可能纯净和不变,这对于该项目来说确实是个奇迹. 据说所有可以可变实现的算法都可以不可变地实现,因此在javascript中如何实现不可变函数备注器?因为要通过函数中的不同路径返回,必须更改函数内部或外部的某些状态. 使用以下功能,如何在javascript中拥

关闭不可变的变量并作为lambda表达式在多个迭代中累加值-Java 8

Jersey客户端中的WebTarget被实现为一个不变的对象,任何更改状态的操作都将返回一个新的WebTarget.为了向其添加查询参数,它以Map的形式出现.编写了以下代码. public WebTarget webTarget(String path, Map<String, String> queryMap) { WebTarget webTarget = client.target

c-可以使用位置“ new”来更改“ const”数据吗?

[这是can memcpy() be used to change “const” member data?的后续措施.Idiomatic Way to declare C++ Immutable Classes确实引起了问题,尤其是this回答“在围绕不可变数据设计的语言中,它知道(尽管)(逻辑)不可变也可以“移动”数据”. ] 给定具有const成员的结构 struct point

JavaScript中的不可变哈希和数组实现?

在javascript中是否有简单的不可变哈希和数组实现?我不需要最好的速度,合理的速度比克隆更好. 此外,如果Java或其他语言中的简单实现可以很容易理解并移植到JavaScript,那么它也会很好. 更新: 目标不仅仅是冻结散列(或数组),而是为了有效实现更新操作 – 更新不可变散列应该返回一个

javascript – 使用immutability helper在React状态下更新数组对象

我正在使用immutability helper更新React状态的数组中的对象. 我想要修改的对象是嵌套的: this.state = { a: { b: [{ c: '', d: ''}, ...] } } 我想使用immutability helper更新b的第n个元素中的prop c. 没有不变性助手的等效代码是: const newState = Object.assign({}

java – J bloch使用的“失败原子性”是什么以及它对于不可变对象有何益处?

刚刚看到下面的声明作为不可变对象的好处 Immutable object always have “failure atomicity” (a term used by Joshua Bloch) : if an immutable object throws an exception, it’s never left in an undesirable or indeterminate state. 任何人都可以更详

java – 为什么共享可变性不好?

我正在观看关于Java的演讲,有一次,讲师说: “可变性是可以的,分享是好的,共享的可变性是魔鬼的工作.” 他所指的是以下一段代码,他认为这是一种“极其糟糕的习惯”: //double the even values and put that into a list. List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 1, 2

java – 为什么后期增量适用于包装类

我正在对一些代码进行审查,并且遇到了一个有人在增加一个成员变量的实例,该成员变量是一个围绕Integer的包装类.我亲自尝试过,真的很惊讶它有效. Integer x = 0; System.out.print(x++ + ", "); System.out.print(x); 这打印出0,1,而不是0,正如我预期的那样.我查看了语言规范,找

python – Pandas:修改特定级别的Multiindex

我有一个带有Multiindex的数据框,想要修改Multiindex的一个特定级别.例如,第一级可能是字符串,我可能想要从该索引级别删除空格: df.index.levels[1] = [x.replace(' ', '') for x in df.index.levels[1]] 但是,上面的代码会导致错误: TypeError: 'FrozenList' does not support m

缺少Java中的不可变对象?

Java中不可变对象的优点似乎很清楚: >一致的状态 >自动螺纹安全>简单 您可以通过使用私有final字段和构造函数注入来支持不变性. 但是,在Java中支持不可变对象的缺点是什么? 即 >与ORM或Web演示工具不兼容?>不灵活的设计?>实施复杂性? 是否有可能设计一个主要使用不可变对象的大规模系统

带有空格的Python字符串,最后没有空格和不变性

我了解到在一些不可变类中,__ new__可能会返回一个现有实例 – 这就是int,str和tuple类型有时对小值进行的操作. 但为什么以下两个片段的行为不同? 最后有一个空格: >>> a = 'string ' >>> b = 'string ' >>> a is b False 没有空间: >>> c = 'string' >>> d = &#