问题标签 [mutable-reference]

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

rust - 如何迭代 trait 对象或无大小类型的元组

这个问题最初是在 reddit 的这篇文章中找到的。

虽然有经验的 Rust 用户会发现元组中的元素不必相同(如果是,则应该使用数组!),因此迭代它们没有意义,但在某些情况下仍然存在这种情况很有用。

这些情况是元组的类型可以转换为相同的未调整大小的类型(例如[u8]or dyn Trait)。

演示:

我找不到写上述内容的好方法。任何想法?


要查看一个不够漂亮的可能答案,这里是:

游乐场链接

0 投票
0 回答
373 浏览

rust - Rust 中是否有一种干净的方法可以通过替换它的值来改变 `&mut`?

有没有一种干净的方法来实现一个安全函数g,该函数通过应用其值来改变可变引用,f而无需实现Cloneor Default(或任何其他特殊特征) for T?如果不是,为什么或不应该这是可能的?

想象一个类型T和一个函数f

例如:

以下代码无效,因为p无法取消引用:

我搜索并尝试了很多东西,但我没有想出一个安全的解决方案。


Clone对于对允许和允许的情况感兴趣的人Default

  • 通过实施Clone,您可以:

    /li>
  • 通过实施Default,您可以:

    /li>
0 投票
1 回答
727 浏览

reactjs - React Hook useEffect 内部的“dataURI”变量将在每次渲染后丢失

我想将下面用 vanilla javascript 编写的函数翻译成一个反应函数。下面的功能允许用户单击图像输入并将图像附加到包含类“.editor”的文本区域

这是我到目前为止在我的反应组件中所做的......我收到以下错误消息

TypeError:editor.push 不是函数

Tools.js 组件:

Editor.js 组件:

0 投票
1 回答
161 浏览

rust - Rust 链表不能借用上一个和下一个元素作为可变的(只需要不可变的引用)

目前,我正在开发一个小应用程序来模拟(多链)钟摆。为了保存它们,我决定使用 std::collections::LinkedList。

显示它们并静态移动它们不是问题,但是为了计算真正的运动,我需要知道父摆和子摆的一些值。

我真的不需要对它们的可变引用,但是链表 API 不允许我采用不可变的引用。但我想这无论如何都不会改变编译器的想法,因为它仍然是一个可变的和一些不可变的借用。

我的代码如下所示:

如果我将此代码包装在 unsafe {} 中,编译器不会在意并一直告诉我我有多个可变借用 + 一个不必要的unsafe块。

如果有人可以帮助我,那就太棒了!
如果在这里使用 LinkedList 完全是垃圾,并且有更好的方法,请告诉我!

提前谢谢了!

0 投票
1 回答
57 浏览

rust - 如何将任意就地操作应用于 &mut 引用?

有没有办法在不需要AddAssignorClone的情况下编写这个函数T

如所写,我收到错误:

0 投票
1 回答
463 浏览

rust - 重借可变引用

当我想知道可变引用如何进入方法时,所有的问题都开始了。

我用谷歌搜索了很多。(真的很多)而且我注意到作为参数传递给函数的可变引用总是经历以下转换。(称为重借)

所以,我在谷歌上搜索了更多关于“再借”的细节。

这就是我所拥有的。

在任何代码中,x 指的是任意数据。我没有提到它,因为我认为它的类型对于讨论并不重要。(但是,我自己使用了 i32)。

好吧。这很有趣。看来b不仅借x,而且还借a

也许,我们可以像这样澄清再借:&'a *(&'b mut x)。它已经借了x(这里有一个生命周期'a),但也借了a(它有一个生命周期'b)。

所以我运行了下面的代码来证实我的猜想。

但这有效!

什么??但我只是决定得到这个。 &'a mut *&mutx,不是&'a mut *&'b mutx

我不知道为什么mut x在 的生命周期内不可用,&mut *&mutx也不知道为什么在 的生命周期mut x后重新可用&mut *&mutx,但是“好吧,我们就这么说吧”。

但是看看这个。对于一个清晰和一般的理解,我完全没有想到。

生命周期不是简单地依赖于真实数据b所指的吗??? &'a **& &mut x,不是&'a **&'b &'c mut x

现在呢?

&'a **&'b &mut x???(这是我的猜测)。

我该如何接受这种复杂的情况?

0 投票
2 回答
60 浏览

rust - 很难管理引用和取消引用的化合物

我很难理解这&*a意味着什么lifetime。我不知道*运算符如何与变量的生命周期相关。

好像 b 借了 x 也借了 a,所以不仅 x(即 *a) 不能移动或修改,也a不能使用。

编译器的错误信息是:b 借用了 a。

所以,我运行了第二个代码。据我了解,借来的数据不能重新分配、移动或丢弃。之前我特意做a了drop b,以确保它a的寿命应该比b's长。

但是,第二个代码仍然有效。

那么,我如何理解与 相关的生命周期&mut *a

0 投票
0 回答
30 浏览

rust - 我可以在同一范围内对类型及其特征对象进行可变引用吗?

我可以在同一范围内对值进行可变引用和对具有相同值的特征对象进行可变引用吗?那是未定义的行为吗?下面添加了一个示例代码片段以进行说明。

在下面的代码中,同时拥有 check 和 check_trait 引用是否有效。

0 投票
1 回答
65 浏览

rust - Rust 借用检查器和早期回报

Rust-lang Playground 链接

我有一些与上面提供的代码相似但更复杂的代码,这些代码我已经使用了很长时间。借用检查器对 的实现不满意,definitely_get并出现以下错误

没有办法在 Rust 中使用可变引用来实现回退逻辑似乎是不合理的,所以我无法想象没有办法。