问题标签 [borrowing]

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 投票
2 回答
835 浏览

iterator - 具有内部可变性的 Vec

我有一个包含被调用的结构AppDataVec<Box<Updatable>>其中objects包含实现Updatable具有以下功能的特征的结构:

AppData结构存储在具有以下功能data的结构中的字段中:App

我不能这样做,因为Box<T>它是不可变的。所以我尝试使用索引器:

但后来我得到

一次不能多次借用self.datamutable

那我该怎么办?我可能可以使用RefCelletc 的组合来编译它,但我不确定它是否是惯用的 Rust。几种选择:

  • 克隆Vec并迭代克隆。但我遇到了麻烦,因为Updateable没有实现Sized.
  • 使用RefCell而不是Box. 我不确定我是否需要它,因为我没有存储对Vec内部的引用,Updatables但这可能没有什么不同?我想RefCell应该Rc在这种情况下使用,因为我想要可变引用?这也不能解决我的问题,因为我仍然需要以self.data某种方式拥有所有权,对吧?
  • self.data在解构后取得所有权,self然后在我们完成后将其放回自我。我怎么做?

提前致谢!

0 投票
0 回答
56 浏览

rust - 调用同时处理不同字段的两个成员函数

我正在将一个旧项目移植到 Rust,但遇到了一个我找不到解决方案的问题。我发现的唯一类似的事情是this,它没有回答实际问题。根本问题是这样的:

在我的真实世界代码中,我有这个:

仅当我内联该immutable_scanline_buffer()方法的实现时才编译,并且仅因为该draw_scanline()方法是该self.bitmap字段的方法,而不是实际的GlyphPlacer结构:

我明白为什么会发生这种情况,但是如何处理这样的情况呢?我不能将这两个字段分开,因为它们只是实现的一部分GlyphPlacer,而且我不能总是像那样复制粘贴代码,因为像这样的函数的实现immutable_scanline_buffer()不能总是那么短。

0 投票
0 回答
397 浏览

rust - 装箱对 &mut self 的引用

我是 Rust 的新手,作为学习过程的一部分,我正在尝试创建一个树结构,其中每个节点都有一个子节点向量和对其父节点的引用。我想为addChild()节点创建一个函数,该函数采用新节点的值(i32现在为 s ),将其添加到子列表中,并将对自身的引用作为父节点传递。在 Rust by Example 的链表示例之后,我尝试使用Box<>. 由于我同时修改了父对象并传递了对它的引用,所以我被卡住了,因为借用检查器不希望我取消引用&mut self(参见下面的代码)。

由此我有两个问题:

  1. 在树结构中保留对父级的引用的正确方法是什么?在 CI 中,将保留一个指向父级的简单指针和一些任意子级的集合。

  2. 你应该如何在 Rust 的同一个函数中修改和传递对对象的引用?

下面是我的 enum 和 impl 的完整代码,带有一个额外的测试函数来修改 self 而不通过它。


0 投票
1 回答
84 浏览

string - 获取字符串作为格式化输出中的值

我正在尝试通过示例网站通过 Rust上的“元组课程” ,但我被格式化的输出实现所困。我有这段代码,它打印传递的矩阵:

但是编译器会打印下一条消息:

我试图将output_data's 结果包装到 aRefCell中,但编译器仍然会打印此错误。如何解决此问题,以便write!宏正常工作?

0 投票
3 回答
6375 浏览

hashmap - 在 Rust 中取消引用字符串和 HashMap

我试图了解 HashMaps 在 Rust 中是如何工作的,我想出了这个例子。

当我尝试编译未注释最后一行的代码时,出现以下错误

文档的 Trait 实现部分将取消引用指定为fn deref(&self) -> &str

那么这里发生了什么?

0 投票
3 回答
453 浏览

collections - 为什么借用的 HashMap 的键和值是通过引用而不是值访问的?

我有一个借用的函数,HashMap我需要通过键访问值。为什么键和值是通过引用而不是值来获取的?

我的简化代码:

  • 为什么我必须指定密钥作为参考,即,file_ids.get(&whatever).unwrap()而不是file_ids.get(whatever).unwrap()

  • 据我了解,last_string必须是 type &String,意思是借来的 string,因为拥有的集合是借来的。那正确吗?

  • 与上述观点类似,我是否正确假设posis 是类型&u16,因为它从 中获取借来的值ids

0 投票
1 回答
141 浏览

pointers - 什么时候应该在作业的两边使用“&”?

Condvar文档显示了一个示例,其中包括以下内容:

我想知道将&这项任务的双方都包括在内可能有什么好处。换句话说,为什么不直接写:

两个版本都编译;有语义上的区别吗?如果没有,是否有任何理由更喜欢示例中出现的语法?

总的来说,我仍然在努力理解何时/何地&*应该习惯性地出现在 Rust 代码中。我的直觉是将这个字符组合“看”(读)为无操作,尽管我理解由于 Rust 的Deref语义,情况并非如此。

0 投票
1 回答
341 浏览

rust - 如何制作指向树节点字段的可变指针并对其进行变异?

我想在树中找到一些节点,我需要一个指向节点容器的指针:&mut Vec<Node>

0 投票
4 回答
4371 浏览

rust - 迭代递归结构时无法获得可变引用:一次不能多次借用可变引用

我正在尝试迭代地导航递归数据结构,以便在某个位置插入元素。就我有限的理解而言,这意味着对结构的根进行可变引用,并依次将其替换为对其跟随者的引用:

(锈游乐场链接)

但是,这失败了:

这两者都是有意义的,anchor并且指的是相同的结构,但实际上在解构它之后node我不再关心它了。anchor

如何back()使用安全的 Rust 正确实现?

0 投票
1 回答
1911 浏览

hashmap - 关于 Rust HashMap 和 String 借用的困惑

该程序接受一个整数 N,后跟 N 行,其中包含由空格分隔的两个字符串。我想将这些行放入 aHashMap中,使用第一个字符串作为键,第二个字符串作为值:

该程序按预期工作:

当我尝试将这些解析的字符串放入 aHashMap和 uncommentmap.insert(data[0], data[1]);时,编译失败并出现以下错误:

我不明白为什么会出现这个错误,因为我认为map.insert()表达式根本没有借用字符串input