BorrowMut只要点错某个函数, clion 自动use;
struct S{
age: int,
}
fn main() {
let mut a: Rc<RefCell<S>> = Rc::new(RefCell::new(S { age: 15 }));
let mut b = (a.borrow_mut()); // 其他可用的method 都测试了, 都无法修改age;
b.age = 10;
}
primer例子也无法重现:
use std::collections::HashMap;
use std::cell::RefCell;
use std::rc::Rc;
fn main() {
let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));
shared_map.borrow_mut().insert("africa", 92388);
shared_map.borrow_mut().insert("kyoto", 11837);
shared_map.borrow_mut().insert("piccadilly", 11826);
shared_map.borrow_mut().insert("marbles", 38);
}```
1
共 9 条评论, 1 页
评论区
写评论类型推断的问题吧。
你引入了'borrow_mut'所以导致'let mut b = a.borrow_mut();',这句话被推断为b是a变量的一个可变借用,等同于'let mut b = &mut a',所以会导致'no field
age
on type&mut Rc<RefCell<S>>
'。编译器错误提示非常简洁明显的提示你错误的问题了。如果不引入这个trait的话,Rc本身不包含borrow_mut这个方法,显然会自动解引用到RefCell,然后调用borrow_mut,结果就是正确的。这些基本上看编译器错误提示就知道怎么改了。
原来我也是因为引用了
BorrowMut
导致通过不了编译。搜了下有人提过这个问题。
1.50,很正常,能跑通,结果也没问题
原因竟然这么诡异! 这是我测试代码怎么测试都不通过; 因为测试没删use, 话说这use这么强大吗? 影响代码编译?
这个例子我本机也跑不通,看了下插件的类型推断和与其是不一致的(下面的类型是我把插件推断的类型复制上去的,不是指定的)。
错误提示
看了下本机的版本和页面版本也对的上
改成这样才行
--
👇
LJason77: 真就看标题知作者呗。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1d345f297df1a6f44f7a27a2b87bbd5e
没看懂哪里有问题?
真就看标题知作者呗。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1d345f297df1a6f44f7a27a2b87bbd5e
没看懂哪里有问题?