问题标签 [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 回答
404 浏览

rust - 向下转换 Ref 时处理向下转换错误> 进入参考>

我需要编写一个函数foo,它接受 a &RefCell<Box<dyn Any>>,从 中借用RefCell并返回一个向下转换的对象。向下转换的类型是在运行时选择的,但对于这个例子,我们假设它是usize.

我尝试foo这样实现:

这个版本的问题是它假设它downcast_ref总是有效的,但我想发现一个downcast_ref错误。下面我尝试以foo一种可以捕获错误的方式实现:

这个版本可以捕获 downcast 错误,但它必须调用downcast_ref两次(这可以接受,但我想知道是否有更好的方法)。当尝试downcast_ref只使用一次时,我遇到了终身错误。

0 投票
1 回答
265 浏览

rust - Why does RefCell:borrow_mut result in a BorrowMutError when used on both sides of a short-circuiting boolean AND (&&)?

I wrote this code for the leetcode same tree problem:

playground

I think && is a short-circuit operator which means the two expressions won't exist at the same time, so two mutable references should not exist at the same time.

0 投票
1 回答
147 浏览

rust - 将 Ref 返回到 Rc 内部的东西> 没有 Ref::map

首先是工作代码:

相关部分是give_value功能。

我想将 a 返回Ref到 a 内的某个东西Rc<RefCell<>>,在本例中是一个结构内的值。

这很好用,但由于我刚开始学习 Rust,我想知道如何在不使用Ref::map.

“天真的”方法:

失败的原因很明显:

所以我的问题是:我怎样才能重新创建自己的Ref::map功能?

0 投票
1 回答
77 浏览

rust - 高效获取 Vec> 来自 Ref<'a, BTreeSet>

我有一个Ref<'a, BTreeSet<T>>,我想将其内容的引用作为Vec<Ref<'a, T>>.
一种方法是:

一个运行的例子

现在让n为 的大小btree
因为从二叉树中获取值需要O(log(n))并且因为遍历二叉树需要O(n)这种方法具有时间复杂度O(n log(n))

&'a BTreeSet<T>即使用and&'a T代替Ref<'a, BTreeSet<T>>and这样做(因为我们只Ref<'a, T>需要O(n)收集在数组中迭代的引用)。使用普通引用的方法示例如下。

一个运行的例子

我的问题是:
Ref<'a, BTreeSet<T>>没有办法提高Vec<Ref<'a, T>>时间O(n)复杂度?

0 投票
1 回答
494 浏览

struct - 在 Rust 中传递对结构的引用

我的问题基本上是在我的程序中,我需要将对s结构的引用传递到多个地方,包括一个新线程。例如,在 CI 中可以将其声明为全局结构并以这种方式使用它。我怎么能在生锈中做到这一点?

我还需要对一些代码使用RefCell包装Rc(我以前的问题)。

0 投票
1 回答
133 浏览

rust - 从关闭返回时的 RefMut 生命周期错误

我的结构中有一个RefCell要访问和修改的结构。但是,我可以访问它的唯一方法RefCell是使用闭包。因此,我想从闭包中返回一个可变引用( RefMut),我可以在封闭范围内使用和修改它。

但是,编译器抱怨说RefMut我返回的生命周期超过了我创建它的闭包的生命周期。

尽管如此,我还是看到了与我想要实现的功能类似的代码——例如这里

这两个用例有什么区别?为了能够返回RefMut参考,我缺少什么?

0 投票
1 回答
329 浏览

rust - “不能返回引用临时值的值”和 Rust 中的内部可变性

我在 Rust 中有以下代码:

regexp 是惰性计算的,因此使用捕获&mut selfi 不想要RefCell的。

我收到以下消息:

编译器消息似乎很清楚:Refborrow()外部临时创建并返回。但是我相信Option( self.regexp_data) 归RefCell结构本身所有,因此在内部使用它应该没问题(因为函数不是pub)。

我还尝试了以下方法(但失败并显示相同的消息)

我该如何解决?

0 投票
1 回答
113 浏览

vector - 对 RefCell 中数据的不可变引用

我正在尝试为具有内部可变性的结构实现 Index 方法:

但是,由于以下原因无法编译:

我的解决方案是在 RefCell 中返回向量的引用。但是我找到的唯一方法是 get_mut() 并且对于 Index 特征,我需要返回一个不可变的引用......

我将不胜感激有关如何处理此问题的任何建议。

0 投票
1 回答
98 浏览

rust - 如何构建一个可变 Vecs 池,以便在 Drop 上重用?

我正在尝试创建一个可变Vec对象池,可以根据需要将其传递给函数,并在不再需要它们时重用(因为我的目标是 WASM,我不想让Vecs 自己释放和重新分配)。我有一个使用Rcand的实现RefCell,我想知道是否有更好(更有效?)的方法来做到这一点。

我当前的代码用于Rc::strong_count跟踪我是否已分发缓冲区并RefCell允许对Vec内部进行可变访问:

可以使用以下代码测试此代码:

这给出了预期的输出:

但是,我正在做的事情似乎效率低下,因为两者RcRefCell::borrow_mut()在跟踪缓冲区是否已“借出”(因为RefCell如果它的内容被双重借用,则有能力出错)。此外,从人体工程学上讲,我不能buffers.get_buffer().borrow_mut()在没有 Rust 抱怨临时值丢失的情况下调用一行代码,这很烦人。

所以,我的问题是:有没有更好的方法来做到这一点?

0 投票
0 回答
103 浏览

rust - 当我在 RefCell<> 上内联借用时,Rust 出现恐慌

当我在函数中运行以下行时,Rust 会发生恐慌。X 是 &Tree,树是 Rc<RefCell<TreeNode<>>>。TreeNode 是一个结构。

我尝试将 borrow_mut() 更改为 borrow() 并将第二个保留为 borrow_mut() 但相同的错误消息。

错误信息:

整体功能:

可重现的代码