问题标签 [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.
rust - 向下转换 Ref 时处理向下转换错误> 进入参考>
我需要编写一个函数foo
,它接受 a &RefCell<Box<dyn Any>>
,从 中借用RefCell
并返回一个向下转换的对象。向下转换的类型是在运行时选择的,但对于这个例子,我们假设它是usize
.
我尝试foo
这样实现:
这个版本的问题是它假设它downcast_ref
总是有效的,但我想发现一个downcast_ref
错误。下面我尝试以foo
一种可以捕获错误的方式实现:
这个版本可以捕获 downcast 错误,但它必须调用downcast_ref
两次(这可以接受,但我想知道是否有更好的方法)。当尝试downcast_ref
只使用一次时,我遇到了终身错误。
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:
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.
rust - 将 Ref 返回到 Rc 内部的东西> 没有 Ref::map
首先是工作代码:
相关部分是give_value
功能。
我想将 a 返回Ref
到 a 内的某个东西Rc<RefCell<>>
,在本例中是一个结构内的值。
这很好用,但由于我刚开始学习 Rust,我想知道如何在不使用Ref::map
.
“天真的”方法:
失败的原因很明显:
所以我的问题是:我怎样才能重新创建自己的Ref::map
功能?
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)
复杂度?
struct - 在 Rust 中传递对结构的引用
我的问题基本上是在我的程序中,我需要将对s
结构的引用传递到多个地方,包括一个新线程。例如,在 CI 中可以将其声明为全局结构并以这种方式使用它。我怎么能在生锈中做到这一点?
我还需要对一些代码使用RefCell
包装Rc
(我以前的问题)。
rust - “不能返回引用临时值的值”和 Rust 中的内部可变性
我在 Rust 中有以下代码:
regexp 是惰性计算的,因此使用捕获&mut self
i 不想要RefCell
的。
我收到以下消息:
编译器消息似乎很清楚:Ref
由borrow()
外部临时创建并返回。但是我相信Option
( self.regexp_data
) 归RefCell
结构本身所有,因此在内部使用它应该没问题(因为函数不是pub
)。
我还尝试了以下方法(但失败并显示相同的消息)
我该如何解决?
vector - 对 RefCell 中数据的不可变引用
我正在尝试为具有内部可变性的结构实现 Index 方法:
但是,由于以下原因无法编译:
我的解决方案是在 RefCell 中返回向量的引用。但是我找到的唯一方法是 get_mut() 并且对于 Index 特征,我需要返回一个不可变的引用......
我将不胜感激有关如何处理此问题的任何建议。
rust - 如何构建一个可变 Vecs 池,以便在 Drop 上重用?
我正在尝试创建一个可变Vec
对象池,可以根据需要将其传递给函数,并在不再需要它们时重用(因为我的目标是 WASM,我不想让Vec
s 自己释放和重新分配)。我有一个使用Rc
and的实现RefCell
,我想知道是否有更好(更有效?)的方法来做到这一点。
我当前的代码用于Rc::strong_count
跟踪我是否已分发缓冲区并RefCell
允许对Vec
内部进行可变访问:
可以使用以下代码测试此代码:
这给出了预期的输出:
但是,我正在做的事情似乎效率低下,因为两者Rc
都RefCell::borrow_mut()
在跟踪缓冲区是否已“借出”(因为RefCell
如果它的内容被双重借用,则有能力出错)。此外,从人体工程学上讲,我不能buffers.get_buffer().borrow_mut()
在没有 Rust 抱怨临时值丢失的情况下调用一行代码,这很烦人。
所以,我的问题是:有没有更好的方法来做到这一点?
rust - 当我在 RefCell<> 上内联借用时,Rust 出现恐慌
当我在函数中运行以下行时,Rust 会发生恐慌。X 是 &Tree,树是 Rc<RefCell<TreeNode<>>>。TreeNode 是一个结构。
我尝试将 borrow_mut() 更改为 borrow() 并将第二个保留为 borrow_mut() 但相同的错误消息。
错误信息:
整体功能: