ownership 相关问题

所有权是Rust的核心概念。所有权系统是编译器在编译时检查以管理内存的一组规则。

从唯一指针列表中返回原始指针

我有一个类 (A),它将拥有另一个类 (B) 的一组实例的内存。 A 将其 B 的实例存储为一组 std::unique_ptr。 我希望A能够返回推荐人...

回答 2 投票 0

返回拥有的价值和参考价值

我有一个 Rust 函数,它有固定的输入类型,但我可以选择返回类型: fn foo(数据: &[u8]) 该函数需要对该切片进行更改,因此我创建了一个拥有的值,因此...

回答 1 投票 0

Rust - 返回拥有的价值和对价值的引用

我有一个 Rust 函数,它有固定的输入类型,但我可以选择返回类型: fn foo(数据: &[u8]) 该函数需要对该切片进行更改,因此我创建了一个拥有的值,因此...

回答 1 投票 0

在 Rust 中线程完成后从闭包中返回所有权

我正在学习 Rust,现在正在研究线程。我正在尝试将以下代码片段转换为并行执行: fn 主() { 让 mut 数据: Vec = (1..22).collect(...

回答 1 投票 0

如何修复 Rust 中的“.. 在循环的上一次迭代中可变地借用”?

我必须迭代键,按键查找 HashMap 中的值,可能在找到的结构中作为值进行一些繁重的计算(惰性 => 改变结构)并将其缓存在 Rust 中返回。 我是…

回答 4 投票 0

如何制作一个仅用一个线程即可改变状态的事件处理程序?

TL;DR:如何创建一个请求-响应系统,该系统具有多个结构,仅用一个线程以可变方式相互通信? 我正在为业余爱好项目开发 NES 模拟器。我想要...

回答 1 投票 0

如何将元素添加到向量并返回对该元素的引用?

我正在尝试使用 Rust 编写一个简单的 XML 编写器,首先在内存中构建一棵标签树。 在下面的函数add_child中,我想将新创建的子元素添加到当前元素中'...

回答 1 投票 0

Rust:如何将元素添加到向量并返回对该元素的引用?

我正在尝试使用 Rust 编写一个简单的 XML 编写器,首先在内存中构建一棵标签树。 在下面的函数add_child中,我想将新创建的子元素添加到当前元素中'...

回答 1 投票 0

如何创建一个可以链接到其自身另一个实例的 Rust 结构?

我正在尝试创建一个结构体实例链,如下所示: 结构_实例_a: 编号:1 上一篇:没有了 结构实例b: 编号:2 上一篇:Structure_instance_a ETC.. 但是从编译器中得到这个错误: 错误[

回答 1 投票 0

Rust 借用检查器类比

作为一名学习 Rust 的 C++ 程序员新手,我对所有权以及借用检查器的工作原理并不完全满意,因此在尝试它时,我想到了一个我想询问的类比...

回答 2 投票 0

如何返回对Rc内部值的引用<RefCell<Node>>

我在 Rust 中有以下结构: 类型 NodePtr = Rc>; 结构节点{ 值:选项, 重量:使用, 高度:使用, 家长:选项 我在 Rust 中有以下结构: type NodePtr = Rc<RefCell<Node>>; struct Node { value: Option<String>, weight: usize, height: usize, parent: Option<Weak<RefCell<Self>>>, left: Option<NodePtr>, right: Option<NodePtr> } 我创建了特征 trait Access 和 trait TreeNode 并为 NodePtr 实现了它们。 trait Access { fn borrow_node(&self) -> Ref<Node>; fn borrow_node_mut(&self) -> RefMut<Node>; } trait TreeNode: Sized { fn is_leaf(&self) -> bool; fn set_left_child(&self, child: Option<Self>); fn set_right_child(&self, child: Option<Self>); fn contains_left(&self, line: usize, prev_lines: usize) -> bool; fn contains_right(&self, line: usize, prev_lines: usize) -> bool; fn find_node(&self, line: usize) -> Option<(Self, Side)>; fn insert_into(self, node: Self, placement: Side) -> Self; fn get_line(&self, line: usize) -> Option<&String>; } impl Access for NodePtr impl TreeNode for NodePtr 其中一种方法如下: fn find_node(&self, line: usize) -> Option<(Rc<RefCell<Node>>, Side)>; 此函数返回所需注释的 parent,并且 Side 枚举包含有关左子节点还是右子节点的信息(这样设计是为了使节点可以轻松替换)。 现在我遇到了麻烦。我似乎无法返回对节点包含的字符串的引用,从而导致内部数据实际上无法访问。 NodePtr的另一个方法是find函数: fn get_line(&self, line: usize) -> Option<Ref<String>> { if let Some((node, side)) = self.find_node(line) { let child = match side { Side::Left => Rc::clone(node.borrow_node().left.as_ref().unwrap()), Side::Right => Rc::clone(node.borrow_node().right.as_ref().unwrap()) }; return Some(Ref::map(node.borrow(), |n| n.value.as_ref().unwrap())); } None } 这就是我收到错误的地方: error[E0515]: cannot return value referencing local variable 'node' --> src\blahblah.rs:152:20 | 152 | return Some(Ref::map(node.borrow(), |n| n.value.as_ref().unwrap())); | ^^^^^^^^^^^^^^----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | | | 'node' is borrowed here | returns a value referencing data owned by the current function 而且我似乎无法找到一种方法来获取对任何形状或形式的拥有数据的引用。 什么可以工作,是返回一个选项>,但这很荒谬,而且我也不知道如何将 None 放入引用中。 非常感谢您的帮助。 我尝试以多种方式返回一个Option和一个Option<&String>,但都失败了。我无法通过借阅检查器。 你不能那样做。您已经陷入了使用 Rc<RefCell> 图表的缺点之一。 您可以做的关闭是返回整个节点,可能使用一些包装器只允许获取长度。 或者您可以使用一些允许您以类似于投影 Rc 的方式投影 RefCell 的库,例如 mappable-rc,但这仍然需要您更改方法的返回类型。 更好的方法是使用图形库,例如petgraph。

回答 1 投票 0

为什么子QObject没有被删除?

为了了解有关 PyQt 的更多信息,我编写了一个小脚本: 创建一个 QObject 创建一个 QObject b,以 a 作为其父级 删除一个 此时我期望名称 b 所指向的对象...

回答 1 投票 0

有没有一种方法可以修改闭包外部的字符串而不让该闭包取得它的所有权?

我正在尝试编写一个简单的计算器应用程序来掌握 FLTK,特别是 Rust 绑定。对于输出,我想在可以设置输出的地方存储一个字符串,这样它就是一个

回答 1 投票 0

为什么我可以隐藏之前借用过的变量?楼主在哪里?

试图理解 Rust 中的所有权和借用,我遇到了这个场景,我创建了一个对象 a(应该是所有者),然后将其借入 b。然后,我尝试遮蔽 a: #[推导(

回答 2 投票 0

Rust - 内存管理 - 弹出所有权 - 链表

过去几天我一直在自学 Rust。今天我想尝试一下一个简单的链表。我的工作代码如下。 我有两个问题,关于 List::pop() 函数 b...

回答 1 投票 0

避免对结构体构造函数使用显式类型注释,其中结构体包含通用字段

我正在尝试创建一个结构体,其中包含实现某种特征的东西,该特征可以是自有类型或引用计数指针,例如 Arc、Rc 等。到目前为止,我已经实现了以下

回答 1 投票 0

移动值并重新分配新值应该受到 Rust 1.74 编译器的限制

我写了下面这行代码: fn 主() { 让 mut s = vec!["my".to_string(), "here".to_string(), "babe".to_string()]; 令 t = s; s = vec!["三&q...

回答 1 投票 0

用于推送到其成员被引用的向量的 Rust 所有权

TL;DR:我想要一个不可变元素的向量,它允许对其成员进行短暂的不可变引用,同时能够推送它。 我正在制作一个用于精确算术的板条箱,用作 d...

回答 1 投票 0

是否可以在 Rust 中返回一个包含可变数据引用的结构?

我正在制作一些伪游戏,想要创建一个函数来返回通用敌人。由于某种原因,它不允许我包含 [0, 0] 的使用。 这是代码: 构造敌人<'a&g...

回答 1 投票 0

传递 Rust 的所有权

我目前正在学习 Rust 中的所有权和借用,以及如何在没有借用的情况下无法使用同一个变量执行函数两次,就像本示例中无法编译的那样 ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.