问题标签 [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.
iterator - 具有内部可变性的 Vec
我有一个包含被调用的结构AppData
,Vec<Box<Updatable>>
其中objects
包含实现Updatable
具有以下功能的特征的结构:
该AppData
结构存储在具有以下功能data
的结构中的字段中:App
我不能这样做,因为Box<T>
它是不可变的。所以我尝试使用索引器:
但后来我得到
一次不能多次借用
self.data
mutable
那我该怎么办?我可能可以使用RefCell
etc 的组合来编译它,但我不确定它是否是惯用的 Rust。几种选择:
- 克隆
Vec
并迭代克隆。但我遇到了麻烦,因为Updateable
没有实现Sized
. - 使用
RefCell
而不是Box
. 我不确定我是否需要它,因为我没有存储对Vec
内部的引用,Updatables
但这可能没有什么不同?我想RefCell
应该Rc
在这种情况下使用,因为我想要可变引用?这也不能解决我的问题,因为我仍然需要以self.data
某种方式拥有所有权,对吧? self.data
在解构后取得所有权,self
然后在我们完成后将其放回自我。我怎么做?
提前致谢!
rust - 调用同时处理不同字段的两个成员函数
我正在将一个旧项目移植到 Rust,但遇到了一个我找不到解决方案的问题。我发现的唯一类似的事情是this,它没有回答实际问题。根本问题是这样的:
在我的真实世界代码中,我有这个:
仅当我内联该immutable_scanline_buffer()
方法的实现时才编译,并且仅因为该draw_scanline()
方法是该self.bitmap
字段的方法,而不是实际的GlyphPlacer
结构:
我明白为什么会发生这种情况,但是如何处理这样的情况呢?我不能将这两个字段分开,因为它们只是实现的一部分GlyphPlacer
,而且我不能总是像那样复制粘贴代码,因为像这样的函数的实现immutable_scanline_buffer()
不能总是那么短。
rust - 装箱对 &mut self 的引用
我是 Rust 的新手,作为学习过程的一部分,我正在尝试创建一个树结构,其中每个节点都有一个子节点向量和对其父节点的引用。我想为addChild()
节点创建一个函数,该函数采用新节点的值(i32
现在为 s ),将其添加到子列表中,并将对自身的引用作为父节点传递。在 Rust by Example 的链表示例之后,我尝试使用Box<>
. 由于我同时修改了父对象并传递了对它的引用,所以我被卡住了,因为借用检查器不希望我取消引用&mut self
(参见下面的代码)。
由此我有两个问题:
在树结构中保留对父级的引用的正确方法是什么?在 CI 中,将保留一个指向父级的简单指针和一些任意子级的集合。
你应该如何在 Rust 的同一个函数中修改和传递对对象的引用?
下面是我的 enum 和 impl 的完整代码,带有一个额外的测试函数来修改 self 而不通过它。
string - 获取字符串作为格式化输出中的值
我正在尝试通过示例网站通过 Rust上的“元组课程” ,但我被格式化的输出实现所困。我有这段代码,它打印传递的矩阵:
但是编译器会打印下一条消息:
我试图将output_data
's 结果包装到 aRefCell
中,但编译器仍然会打印此错误。如何解决此问题,以便write!
宏正常工作?
hashmap - 在 Rust 中取消引用字符串和 HashMap
我试图了解 HashMaps 在 Rust 中是如何工作的,我想出了这个例子。
当我尝试编译未注释最后一行的代码时,出现以下错误
文档的 Trait 实现部分将取消引用指定为fn deref(&self) -> &str
那么这里发生了什么?
collections - 为什么借用的 HashMap 的键和值是通过引用而不是值访问的?
我有一个借用的函数,HashMap
我需要通过键访问值。为什么键和值是通过引用而不是值来获取的?
我的简化代码:
为什么我必须指定密钥作为参考,即,
file_ids.get(&whatever).unwrap()
而不是file_ids.get(whatever).unwrap()
?据我了解,
last_string
必须是 type&String
,意思是借来的 string,因为拥有的集合是借来的。那正确吗?与上述观点类似,我是否正确假设
pos
is 是类型&u16
,因为它从 中获取借来的值ids
?
pointers - 什么时候应该在作业的两边使用“&”?
Condvar
文档显示了一个示例,其中包括以下内容:
我想知道将&
这项任务的双方都包括在内可能有什么好处。换句话说,为什么不直接写:
两个版本都编译;有语义上的区别吗?如果没有,是否有任何理由更喜欢示例中出现的语法?
总的来说,我仍然在努力理解何时/何地&*
应该习惯性地出现在 Rust 代码中。我的直觉是将这个字符组合“看”(读)为无操作,尽管我理解由于 Rust 的Deref
语义,情况并非如此。
rust - 如何制作指向树节点字段的可变指针并对其进行变异?
我想在树中找到一些节点,我需要一个指向节点容器的指针:&mut Vec<Node>
rust - 迭代递归结构时无法获得可变引用:一次不能多次借用可变引用
我正在尝试迭代地导航递归数据结构,以便在某个位置插入元素。就我有限的理解而言,这意味着对结构的根进行可变引用,并依次将其替换为对其跟随者的引用:
但是,这失败了:
这两者都是有意义的,anchor
并且指的是相同的结构,但实际上在解构它之后node
我不再关心它了。anchor
如何back()
使用安全的 Rust 正确实现?
hashmap - 关于 Rust HashMap 和 String 借用的困惑
该程序接受一个整数 N,后跟 N 行,其中包含由空格分隔的两个字符串。我想将这些行放入 aHashMap
中,使用第一个字符串作为键,第二个字符串作为值:
该程序按预期工作:
当我尝试将这些解析的字符串放入 aHashMap
和 uncommentmap.insert(data[0], data[1]);
时,编译失败并出现以下错误:
我不明白为什么会出现这个错误,因为我认为map.insert()
表达式根本没有借用字符串input
。