提问人:안태찬 提问时间:10/27/2023 更新时间:10/27/2023 访问量:46
Rust 闭合、RefCell、Rc 计数 [已关闭]
Rust closure, RefCell, Rc Count [closed]
问:
counter_clone处于关闭状态。 因此,计数器不会添加,仍保持 0 你介意我问你解决这个问题吗? 谢谢!
/// Implement a function to convert a Church numeral to a usize type.
pub fn to_usize<T: 'static + Default>(n: Church<T>) -> usize {
use std::cell::RefCell;
let counter = Rc::new(RefCell::new(0));
let counter_clone = Rc::clone(&counter);
let result_func = n(Rc::new(move |x| {
*counter_clone.borrow_mut() += 1;
x
}));
let _ = result_func(Default::default());
// Extract the value from the reference-counted cell
let result = *counter.borrow();
result
}
答:
1赞
Masklinn
10/27/2023
#1
您没有提供最小可重现示例,并且您的代码段具有多个代码挂钩,这些钩子具有不可知的行为(以及可能的错误)。
像往常一样,选择不会被破坏,并且肯定可以正常工作,包括闭包:RefCell
Rc
use std::rc::Rc;
use std::cell::RefCell;
fn main() {
let counter = Rc::new(RefCell::new(0));
let counter_clone = Rc::clone(&counter);
let f = move || *counter_clone.borrow_mut() += 1;
dbg!(counter.borrow());
f();
dbg!(counter.borrow());
}
指纹
[src/main.rs:10] counter.borrow() = 0
[src/main.rs:12] counter.borrow() = 1
正如人们所期望的那样。
我假设你的 和 是问题所在,并且从未调用过关闭。这是迄今为止最可能的解释。但是,由于您没有提供任何一个,并且 SO 尚未提供我要求的 pyschic 远程读心器,因此这是我所能提供的帮助。n
result_func
评论