问题标签 [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.
c# - 属性和变量之间的区别
此代码完美运行。
同时这会导致编译错误(“Cannot modify the return value of p, because it is not a variable”):
有什么不同?
python - Python 子类元组对象,能够在内部重新实例化自身
我理解 Python 中可变对象与不可变对象的概念,没问题。虽然任何不可变对象的内在价值都不能直接修改,但不可变对象的任何实例都可以用不同的值重新实例化。我想做的是在元组的子类上构建一个内部函数,该函数可以以受控的方式重新分配它自己的值。这可能是我似乎无法找到的基本功能,希望得到任何帮助。
例如,这是我想做的,但这显然行不通。
结果如下...
通过阅读本网站上对此类问题的大量回复,我知道你们中的一些人可能倾向于回答“为什么要这样做?” 但是让我们用更直接的答案来节省响应空间,如果真的是这样的话,可能包括“你不能这样做,没有办法”。
非常感谢大家!
编辑,感谢下面的答案,这是我最终得到的......
您可以看到对上述内容的任何改进/调整,请发布。似乎可以组合 AttributeError raises 的重复?
java - Java 是否具有 Integer、Float、Double、Long 的可变类型?
我处于一种我想使用诸如 Integer 之类的可变版本的情况。我必须使用这些类(如下)还是 Java 有内置的东西?
http://www.java2s.com/Code/Java/Data-Type/Amutableintwrapper.htm
scala - 为什么Scala中没有可变的TreeMap?
是没有时间,一些技术问题,还是有它不应该存在的原因?
java - 对可变对象使用 volatile 关键字
在 Java 中,我知道volatile
关键字提供了变量的可见性。问题是,如果变量是对可变对象的引用,是否volatile
也为该对象内的成员提供了可见性?
在下面的示例中,如果多个线程正在访问volatile Mutable m
和更改value
?
例子
.net - 为什么在 using 语句的闭包内捕获可变结构变量会改变其本地行为?
更新:好吧,现在我已经完成了:我向微软提交了一份错误报告,因为我严重怀疑这是正确的行为。也就是说,对于这个问题,我仍然不能 100% 确定该相信什么;所以我可以看到“正确”的内容可以进行某种程度的解释。
我的感觉是微软要么接受这是一个错误,要么回应在using
语句中修改可变值类型变量构成未定义的行为。
此外,对于它的价值,我至少对这里发生的事情有一个猜测。我怀疑编译器正在为闭包生成一个类,将局部变量“提升”到该类的实例字段;并且由于它在一个using
街区内,因此它正在制作该字段readonly
。正如 LukeH 在对另一个问题的评论中指出的那样,这将阻止方法调用,例如MoveNext
修改字段本身(它们反而会影响副本)。
注意:为了便于阅读,我已经缩短了这个问题,尽管它仍然不是很短。有关完整的原始(较长)问题,请参阅编辑历史记录。
我已经通读了我认为是 ECMA-334 的相关部分,似乎无法找到这个问题的决定性答案。我将首先陈述问题,然后为感兴趣的人提供一些附加评论的链接。
问题
如果我有一个实现的可变值类型IDisposable
,我可以(1)调用一个方法来修改using
语句中局部变量的值的状态,并且代码的行为符合我的预期。然而,一旦我在语句的闭包内捕获了有问题的变量using
,(2) 对值的修改在本地范围内不再可见。
这种行为仅在变量被捕获在闭包内和using
语句内的情况下才明显;仅存在一个 ( using
) 或另一个条件 (闭包) 时并不明显。
为什么在语句的闭包内捕获可变值类型的变量会using
改变其本地行为?
下面是说明第 1 项和第 2 项的代码示例。两个示例都将使用以下演示Mutable
值类型:
1. 在using
块中改变值类型变量
输出代码输出:
using
2. 在块内的闭包内捕获值类型变量
上面的代码输出:
进一步的评论
已经注意到 Mono 编译器提供了我期望的行为(局部变量值的更改在using
+ 闭包情况下仍然可见)。我不清楚这种行为是否正确。
有关我对这个问题的更多想法,请参见此处。
python - 为什么在 Python 中不推荐使用 MutableString?
为什么在 Python 2.6 中不推荐使用MutableString类;
为什么它在 Python 3 中被删除了?
c# - 是否从 using 语句未定义的行为中修改值类型?
这确实是这个问题的一个分支,但我认为它应该得到自己的答案。
根据 ECMA-334 的第 15.13 节(在using
声明中,以下称为resource-acquisition):
在资源获取中声明的局部变量 是只读的,并且应该包括一个初始化器。如果嵌入语句尝试修改这些局部变量(通过赋值或
++
and--
运算符)或将它们作为ref
或out
参数传递,则会发生编译时错误。
这似乎解释了为什么下面的代码是非法的。
但是这个呢?
上面的代码片段在 C# 中是否未定义和/或非法?如果它是合法的,那么这段代码和上面规范的摘录有什么关系?如果它是非法的,为什么它会起作用?是否有一些微妙的漏洞允许它,或者它的工作原理仅归因于运气(因此人们不应该依赖这种看似无害的代码的功能)?
python - 可变类型与不可变类型的图表
在线某处是否有表格或图表显示python中哪些类型(内置)是可变和不可变的?
f# - F# + 具有可变字段的记录中的平等推理
常见的相等/比较成员设计准则是不对可变引用类型实现结构相等,而是看一下具有可变字段的 F# 记录类型:
是在Map
内部排序的,但是mutable
记录字段允许我在记录实例已经在地图内时更改排序,这非常糟糕。
我认为 F# 应该为声明可变字段的 F# 记录类型推断[<NoEquality>]
和[<NoComparison>]
模式,不是吗?