问题标签 [refcell]

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

rust - 如何在 Rust 中对外部数据类型实现 std::hash::Hash 特征?

我有一个基本的 LinkedList 实现,我想在其中迭代我的节点,并将这些节点添加到 HashSet。但是,我无法做到这一点,因为我的节点被包裹在一个 中Rc<RefCell<Node<T>>>,并且我在std::hash::Hash为我的std::cell::Ref<'_, Node<T>>类型实现特征时遇到了麻烦。

我怎样才能实现Hash这个例子的特征?还是我错过了什么?

这是一个失败的测试用例的示例,它尝试将一些节点添加到 a HashSet

这是 Rust 操场上的源代码: https ://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d79329dcb70ba54ff803dbcd93bd47d0

这是来源:

0 投票
1 回答
587 浏览

rust - 有什么办法可以同时不可变和可变地借用 RefCell 吗?

我有一段代码需要对列表进行操作。此列表包含来自其他来源且需要处理并最终删除的项目。该列表还传递给多个函数,这些函数决定是添加还是删除项目。我创建了一个反映我的问题的示例代码:

这在运行时恐慌:

我想我理解这个问题:我有两个不可变的借用,然后第三个是可变的。根据 Rust 文档,这是不允许的:许多不可变借用或单个可变借用。有没有办法解决这个问题?

0 投票
0 回答
47 浏览

rust - 遍历包含在 Rc 中的链接结构并更新它们

我需要在 Rust 中实现 A* 寻路算法。该算法处理特定单元格并使用parent_cell字段相互链接。最后,当找到目标单元格时,路径就是从目标单元格到起始单元格的路径。我需要捕获路径中的每个单元格Vec。我创建了一段简化的代码来反映我的问题:

这不起作用,因为借用检查器妨碍了我:

我尝试&按照编译器的建议使用借用,但感觉这不是正确的方法。

0 投票
2 回答
1073 浏览

rust - 如何为包含 Rc 的结构实现 Deref>?

我的目标是将针对我的结构的方法调用委托给 Trait 的方法,其中 Trait 对象位于Rcof 中RefCell

我试图遵循这个问题的建议: 如何从 Rc<RefCell<A>> 获取 &A 引用?

我得到一个编译错误。

这是错误:

我的示例Display用作特征;实际上,我有一个带有十几种方法的特征。我试图避免必须实现所有这些方法的样板,而只是在每次调用中深入到 Trait 对象。

0 投票
1 回答
24 浏览

rust - 重写函数以使用特征时借用内容时出错

我是 Rust 的新手,并且对这门语言有一点兴趣。我写了两个简单的函数来增加和减少里面的值Rc<RefCell<..>>。由于此功能对任何数字类型都有意义,因此我尝试将它们转换为通用函数:

我突然收到这个错误:

我不明白为什么这种变化会导致这种错误。

0 投票
0 回答
1166 浏览

rust - 如何使用 Rc 的内部值>>?

我有一个需要变量所有权的第三方库的功能。不幸的是,这个变量在一个Rc<RefCell<Option<Foo>>>.

我的代码看起来像这样简化:

我尝试使用std::mem::replace(...)如何在对结构的可变引用中为字段交换新值?

我不知道如何正确地做到这一点。

0 投票
1 回答
110 浏览

rust - 如何在检查已经借用的字段时创建一个对自身进行引用计数的引用的值?

我正在尝试创建一个可变结构B,该结构存储其他结构的实例,这些结构A包含对B. 我想要一个实现,使得对原始文件所做的任何突变都会B传播到As 中保存的引用。

但是,在突变期间,我必须检查包含B在实例中的实例中的字段A,从而打破“一个可变 x 或多个不可变”规则。我需要在可变借用时不可变地借用,但是不可变借用是变异函数的内部,并且不会超出其范围。

操场

它恐慌:

仅使用 可以满足这些要求Rc<RefCell<B>>吗?如果没有,我是否必须沉浸在unsafe代码中?

0 投票
0 回答
343 浏览

rust - 一个RefCell的元素可以吗> 存储在结构中修改同一 Vec 中另一个元素的值?

我有一个包含向量的结构,其元素必须能够修改向量中的其他元素。

我试着这样做:

操场

但是,我收到了这些错误

我该怎么做?另请注意,由于某些限制,我不想在主函数中创建任何额外的变量。

攻击功能就像我应该运行的主程序中 vec 的不同元素的更新功能一样

0 投票
1 回答
185 浏览

rust - 如何返回对 RefCell 内部数据的引用>>?

我正在创建一个延迟加载结构:

我尝试实现一个 get 方法,该方法将返回延迟加载的数据:

但是编译器抱怨说我正在返回一个引用当前函数拥有的数据的值。这个错误对我来说很有意义,但我不确定如何解决它。

这是一个完整示例的链接。

0 投票
0 回答
31 浏览

rust - 访问 Rust 中 Rc 的 Option 内部的结构成员

我想更改类型为 的方法中的结构成员值Rc<RefCell<Option<_>>。可以说我有这个结构:

RefCell { value: [1, 2, 3] }

到目前为止,一切都很好。现在我想将 Vector 包装在 Option 中(或RefCell, 没关系),并且该方法总是尝试移动 Option。

我现在如何可变地访问方法内的 Vector ?我尝试调用into_inner()as_ref()但这仍然给出了我的错误,说我无法在方法内移动选项。Option如果我将另一个包裹在里面Rc并克隆它也无济于事。据我了解, Rc 中的 Option 仍然位于指针后面,那么为什么首先要移动它呢?unwrap()需要所有权吗?