问题标签 [mutable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
329 浏览

c# - 属性和变量之间的区别

此代码完美运行。

同时这会导致编译错误(“Cannot modify the return value of p, because it is not a variable”):


有什么不同?

0 投票
2 回答
1555 浏览

python - Python 子类元组对象,能够在内部重新实例化自身

我理解 Python 中可变对象与不可变对象的概念,没问题。虽然任何不可变对象的内在价值都不能直接修改,但不可变对象的任何实例都可以用不同的值重新实例化。我想做的是在元组的子类上构建一个内部函数,该函数可以以受控的方式重新分配它自己的值。这可能是我似乎无法找到的基本功能,希望得到任何帮助。

例如,这是我想做的,但这显然行不通。

结果如下...

通过阅读本网站上对此类问题的大量回复,我知道你们中的一些人可能倾向于回答“为什么要这样做?” 但是让我们用更直接的答案来节省响应空间,如果真的是这样的话,可能包括“你不能这样做,没有办法”。

非常感谢大家!

编辑,感谢下面的答案,这是我最终得到的......

您可以看到对上述内容的任何改进/调整,请发布。似乎可以组合 AttributeError raises 的重复?

0 投票
7 回答
63795 浏览

java - Java 是否具有 Integer、Float、Double、Long 的可变类型?

我处于一种我想使用诸如 Integer 之类的可变版本的情况。我必须使用这些类(如下)还是 Java 有内置的东西?

http://www.java2s.com/Code/Java/Data-Type/Amutableintwrapper.htm

0 投票
5 回答
9170 浏览

scala - 为什么Scala中没有可变的TreeMap?

是没有时间,一些技术问题,还是有它不应该存在的原因?

0 投票
5 回答
10952 浏览

java - 对可变对象使用 volatile 关键字

在 Java 中,我知道volatile关键字提供了变量的可见性。问题是,如果变量是对可变对象的引用,是否volatile也为该对象内的成员提供了可见性?

在下面的示例中,如果多个线程正在访问volatile Mutable m和更改value?

例子

0 投票
4 回答
1120 浏览

.net - 为什么在 using 语句的闭包内捕获可变结构变量会改变其本地行为?

更新:好吧,现在我已经完成了:我向微软提交了一份错误报告,因为我严重怀疑这是正确的行为。也就是说,对于这个问题,我仍然不能 100% 确定该相信什么;所以我可以看到“正确”的内容可以进行某种程度的解释。

我的感觉是微软要么接受这是一个错误,要么回应在using语句中修改可变值类型变量构成未定义的行为。

此外,对于它的价值,我至少对这里发生的事情有一个猜测。我怀疑编译器正在为闭包生成一个类,将局部变量“提升”到该类的实例字段;并且由于它在一个using街区内,因此它正在制作该字段readonly正如 LukeH 在对另一个问题的评论中指出的那样,这将阻止方法调用,例如MoveNext修改字段本身(它们反而会影响副本)。


注意:为了便于阅读,我已经缩短了这个问题,尽管它仍然不是很短。有关完整的原始(较长)问题,请参阅编辑历史记录。

我已经通读了我认为是 ECMA-334 的相关部分,似乎无法找到这个问题的决定性答案。我将首先陈述问题,然后为感兴趣的人提供一些附加评论的链接。

问题

如果我有一个实现的可变值类型IDisposable,我可以(1)调用一个方法来修改using语句中局部变量的值的状态,并且代码的行为符合我的预期。然而,一旦我在语句的闭包捕获了有问题的变量using,(2) 对值的修改在本地范围内不再可见。

这种行为仅在变量被捕获在闭包内和using语句内的情况下才明显;仅存在一个 ( using) 或另一个条件 (闭包) 时并不明显。

为什么在语句的闭包内捕获可变值类型的变量会using改变其本地行为?

下面是说明第 1 项和第 2 项的代码示例。两个示例都将使用以下演示Mutable值类型:

1. 在using块中改变值类型变量

输出代码输出:

using2. 在块内的闭包内捕获值类型变量

上面的代码输出:

进一步的评论

已经注意到 Mono 编译器提供了我期望的行为(局部变量值的更改在using+ 闭包情况下仍然可见)。我不清楚这种行为是否正确。

有关我对这个问题的更多想法,请参见此处

0 投票
2 回答
6095 浏览

python - 为什么在 Python 中不推荐使用 MutableString?

为什么在 Python 2.6 中不推荐使用MutableString类;
为什么它在 Python 3 中被删除了?

0 投票
4 回答
406 浏览

c# - 是否从 using 语句未定义的行为中修改值类型?

这确实是这个问题的一个分支,但我认为它应该得到自己的答案。

根据 ECMA-334 的第 15.13 节(在using声明中,以下称为resource-acquisition):

在资源获取中声明的局部变量 是只读的,并且应该包括一个初始化器。如果嵌入语句尝试修改这些局部变量(通过赋值或++and--运算符)或将它们作为refout 参数传递,则会发生编译时错误。

这似乎解释了为什么下面的代码是非法的。

但是这个呢?

上面的代码片段在 C# 中是否未定义和/或非法?如果它是合法的,那么这段代码和上面规范的摘录有什么关系?如果它是非法的,为什么它会起作用?是否有一些微妙的漏洞允许它,或者它的工作原理仅归因于运气(因此人们不应该依赖这种看似无害的代码的功能)?

0 投票
1 回答
8096 浏览

python - 可变类型与不可变类型的图表

在线某处是否有表格或图表显示python中哪些类型(内置)是可变和不可变的?

0 投票
1 回答
505 浏览

f# - F# + 具有可变字段的记录中的平等推理

常见的相等/比较成员设计准则是不对可变引用类型实现结构相等,而是看一下具有可变字段的 F# 记录类型:

是在Map内部排序的,但是mutable记录字段允许我在记录实例已经在地图内时更改排序,这非常糟糕。

我认为 F# 应该为声明可变字段的 F# 记录类型推断[<NoEquality>][<NoComparison>]模式,不是吗?