问题标签 [mutability]

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 回答
1357 浏览

reference - RefCell 上的 borrow_mut 之间的区别和 RefCell<&X>

如果我理解正确,则不可能在 Rust 中通过a创建可变借用std::rc::Rc,您必须使用Cellor RefCell。但无论如何我无法理解如何使用它们。例如考虑这个简单的例子

我收到以下错误:

但是,如果我从行中删除引用(并更新类型mutx):

一切都很好。但我不明白为什么,因为RefMut::deref_mut() -> &mut T在第 16 行调用的尊重应该&&mut T在第一种情况下返回,而&mut T在第二种情况下。但是由于编译器应该*根据需要应用许多(如果我知道deref coercionRefMut<X>::deref_mut()是如何工作的),和之间应该没有区别RefMut<&X>::deref_mut()

编辑:错误地我忘了mut在第 15 行写,因为在链接的例子中是正确的。所以现在是let mut mutx...

0 投票
0 回答
169 浏览

string - Is it possible to mutate a string in Swift such that it can be proven to modify the original value?

Start with the claim that Swift makes that strings are 'mutable', Are Swift "mutable" strings really mutable, or are they just like Java strings?, but proceeding with a generally-accepted (and non-Swift) definition of mutability - ie. strictly value immutability, without consideration of bindings

Is it possible to actually mutate a String value such that this prints 'true'?

#xA;

I am not interested in 'structure types' or delayed copy semantics. This question is about if a string value can be modified, from within Swift - although it would be also be interesting to see if such could be mutated by other .. devious means. (If not it is hogwash to even bother discussing value vs reference types instead of pure mutability considerations.)

I am aware of "mutating" methods but disagree with those as 'mutating' the string value. In the example above, let should be substitutable in the final program. If let cannot be substituted; or the object can otherwise not be proven to be the same, then mutability has not been shown.

0 投票
1 回答
20 浏览

c++ - 成员函数从主函数更改对象,但不从其他函数更改对象

我有一个 Stack 类,它在内部使用链表类list。在我的 main 函数中,我的 push 和 pop 成员函数成功地修改了给定的堆栈。我编写了另一个函数,它接受一个堆栈并对其执行一些操作。在内部它使用推送和弹出。奇怪的是,这个函数内部似乎发生了变化,但在它执行之后堆栈保持不变。我将提供一些代码(如果需要,我可以添加更多):

...然后主要:

这导致:

0 投票
1 回答
52 浏览

python - 更改列表的元素会影响/不影响派生列表

我不理解 Python 中列表的以下异常行为,如果有人能说明一下,我将不胜感激:

片段1:

输出:

这对我来说很有意义,因为我们没有执行额外的复制功能来“屏蔽” A 免受 myList 上的元素操作的影响。

片段 2:

输出:

为什么对 myList 的更改未反映在 A 中?

0 投票
3 回答
470 浏览

rust - Rust 编译器如何知道 `Cell` 具有内部可变性?

考虑以下代码(Playground 版本):

我很好奇如何rustc知道它Cell具有内部可变性并且可能会保留对另一个论点的引用。

如果我从头开始创建另一个数据结构,类似于Cell它也具有内部可变性,我该如何判断rustc

0 投票
2 回答
48 浏览

java - 我的构建器实现是否违反了可变性

我想知道我对 QuestionBuilder 的实现是否违反了可变性。

或者我应该调整什么来解决可变性问题。有什么建议么?

0 投票
2 回答
92 浏览

rust - 临时持有借来的物件

结构Parent字段必须存储Option

有必要暂时阻止使用 中的对象的可能性fn main(),直到您调用.unbind()

0 投票
0 回答
26 浏览

python - 具有相同值的不同字符串变量具有相同的内存位置python

希望这里有人可以帮助我解决这个问题。我正在为周五的一年级编程考试做一些复习,但遇到了一些让我困惑的事情。

在我讨论可变性的演讲幻灯片中,有一个特定的部分对我不起作用。例子是:

但是当我在我的程序中输入这个时,它会返回 True 。他们的ID也是相同的。现在我希望如果我打印a == b它会返回True,但肯定a不应该是b因为它们是单个变量。

这也是去年考试的一个问题,因此有助于理解这一点。

非常感谢您对此事的任何帮助。

0 投票
1 回答
91 浏览

f# - 了解 F# 中的可变性:案例研究

我是 F# 的初学者,这是我第一次尝试编写一些严肃的东西。很抱歉,代码有点长,但是我不明白可变性存在一些问题。

这是 Karger MinCut 算法的一个实现,用于计算无向图组件上的 mincut。我不会在这里讨论算法是如何工作的,更多信息https://en.wikipedia.org/wiki/Karger%27s_algorithm 重要的是它是一个随机算法,它运行确定数量的试运行,并采取“最佳”运行。

我现在意识到,如果我确实为每个随机试验构建了一个特定的函数,我可以避免下面的很多问题,但我想确切地了解下面的实现中有什么问题。

我在这个简单的图上运行代码(当我们将图切割成 2 个组件(1、2、3、4)和(5、6、7、8)时,最小切为 2,这两个组件之间只有 2 条边)

该文件simplegraph.txt应将此图编码如下(第一列 = 节点号,其他列 = 链接)

这段代码可能看起来太像命令式编程了,对此我很抱歉。

所以有一个 main for i 循环调用每个试验。第一次执行,(当 i=1 时)看起来很顺利和完美,但是当 i=2 时我有运行时错误执行,因为它看起来有些变量,比如 WG 没有正确重新初始化,导致超出范围的错误。

WG、WG1 和 WGmin 是字典对象 type wgraphobj的记录WG1 在主循环之外定义,我没有对 WG1 进行新的分配。 [但是它的类型是可变的,唉]

我用指令定义了第一个 WG

然后在 for i 循环的开头,我写

然后,我在每次试验中修改 WG 对象以进行一些计算。当试验结束并且我们进入下一个试验(i 增加)时,我想将 WG 重置为其初始状态,如 WG1。但它似乎不起作用,我不明白为什么......

这是完整的代码

MyModule.fs [一些不需要执行的函数]

卡格.fs

算法描述:(我认为解决我的问题不太重要)

在每个试验中,有几个步骤。在每一步,我们将 2 个节点合并为 1 个,(有效地删除 1 个)更新图。我们这样做了 6 次,直到只剩下 2 个节点,我们将其定义为 2 个集群,我们查看这 2 个集群之间的交叉边数。如果我们“幸运”,那两个簇将是 (1,2,3,4) 和 (5,6,7,8) 并找到正确的切割数量。在每个步骤中,对象 WG 都会通过合并 2 个节点的效果进行更新,其中只有 LiveNode(由于合并 2 个节点而没有消除的节点)完美地保持最新状态。

WG.Graph 是更新后的图

WG.Label 包含已合并到当前节点的节点的标签

WG.LabelHead 包含该节点已合并到的节点的标签

WG.RemoveTable 表示节点是否已被删除。

提前感谢任何愿意看看它的人!

0 投票
2 回答
266 浏览

c# - swift中对内部数组的本地引用

我来自 C# 世界,习惯于将数组作为引用类型。据我了解,在 swift 数组中是值类型,但它们试图作为参考值类型。

我实际上不知道如何问我需要什么(我认为当我需要知道答案才能提出问题时就是这种情况),但在 C# 中我会说我需要存储对 a 的内部数组的引用将锯齿状数组转换为局部变量。

考虑以下代码:

此处为 Swift 沙箱http://swiftlang.ng.bluemix.net/#/repl/8608824e18317e19b32113e1aa08deeb4ec5ab96ed8cdbe1dbfb4e753e87d528

在这里,我想就地处理多维数组,这样我就不会创建数组的副本或数组的一部分。

在选项(1)中,我将所有内容更改为“-1”,它可以工作,但为此使用了附加功能。

在选项(2)中,我尝试使用局部变量来存储matrix[rowIdx],但它实际上创建了内部数组的副本——不是我想要的;使用此变量会更改数组的副本,而不是原始的。

我怎样才能达到选项(1)中的结果,但使用局部变量而不是函数?也就是说,如何获取对内部数组的引用并将其放入局部变量?

我会理解答案“这是不可能的”,但我希望这些答案伴随着一些 Apple 参考。