Rust 如何修改“RefCell”的内容<;选项<;T>>;`?

Rust 如何修改“RefCell”的内容<;选项<;T>>;`?,rust,Rust,我有一个选项,它由多个结构共享,并且必须是可变的。我使用的是RefCell,因为据我所知,它是该工作的工具。如何访问(和更改)该选项的内容 我尝试了以下方法: use std::cell::RefCell; #[derive(Debug)] struct S { val: i32 } fn main() { let rc: RefCell<Option<S>> = RefCell::new(Some(S{val: 0})); if let So

我有一个
选项
,它由多个结构共享,并且必须是可变的。我使用的是
RefCell
,因为据我所知,它是该工作的工具。如何访问(和更改)该
选项的内容

我尝试了以下方法:

use std::cell::RefCell;

#[derive(Debug)]
struct S {
    val: i32
}

fn main() {
    let rc: RefCell<Option<S>> = RefCell::new(Some(S{val: 0}));
    if let Some(ref mut s2) = rc.borrow_mut() {
        s2.val += 1;
    }
    println!("{:?}", rc);
}
使用std::cell::RefCell;
#[导出(调试)]
结构{
val:i32
}
fn main(){
设rc:RefCell=RefCell::new(Some(S{val:0}));
如果让一些(ref mut s2)=rc.借用{
s2.val+=1;
}
println!(“{:?}”,rc);
}
但编译器不让我这么做:

错误[E0308]:类型不匹配
--> :10:12
|
10 |如果让一些(参考mut s2)=rc.借用_mut(){
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期结构'std::cell::refmu`
|
=注意:预期类型为'std::cell::RefMut当您输入
RefCell
时,您会得到一个,正如编译器所说。要获取其中的值,只需使用运算符:

使用std::cell::RefCell;
#[导出(调试)]
结构{
val:i32
}
fn main(){
设rc:RefCell=RefCell::new(Some(S{val:0}));
如果let Some(ref mut s2)=*rc.borrow_mut(){//deref_mut
s2.val+=1;
}
println!(“{:?}”,rc);
}
当您使用
RefCell
时,您会得到一个,正如编译器所说。要获取其中的值,只需使用运算符:

使用std::cell::RefCell;
#[导出(调试)]
结构{
val:i32
}
fn main(){
设rc:RefCell=RefCell::new(Some(S{val:0}));
如果let Some(ref mut s2)=*rc.borrow_mut(){//deref_mut
s2.val+=1;
}
println!(“{:?}”,rc);
}

我更喜欢使用
如果让一些人(s2)=rc.break_mut().as_mut(){
,但每个人都有自己的。@Shepmaster请随意编辑我的答案并添加自己的语法。我更喜欢使用
如果让一些人(s2)=rc.break_mut().as_mut(){
,但每个人都有自己的语法。@Shepmaster请随意编辑我的答案并添加自己的语法。
use std::cell::RefCell;

#[derive(Debug)]
struct S {
    val: i32
}

fn main() {
    let rc: RefCell<Option<S>> = RefCell::new(Some(S{val: 0}));

    if let Some(ref mut s2) = *rc.borrow_mut() { // deref_mut
        s2.val += 1;
    }
    println!("{:?}", rc);
}