< 返回版块

FreeWong 发表于 2019-08-28 17:06

{ {{ mod student{

pub struct student{
    pub name:&'static str,
    id:u64
}

impl student{
    pub fn new(name:&'static str)->student{
        student{
            name,
            id:1, //假设 id 的值通过随机产生
        }
    }

    // 只能这样做 ?
    pub fn get_id(&self)->u64{
        self.id
    }

}

}

fn main(){

let mut s=student::student::new("my name"); 

} }} }

如果在 字段 id 前加上 pub,则有可能 id 的值被无意中修改,这里 id 的含义列相当于一个唯一的编号,只能在关联函数 new 中产生,但是我又希望调用方 如 main 可以用只读的方式来访问 id, 是不是在RUST 中只能向像上面一样加上 get_id 这样的方法,多谢

评论区

写评论
作者 FreeWong 2019-08-29 09:20

对以下内容的回复:

感谢回复,无法编译上面的代码

Dengjianping 2019-08-28 17:46

可以使用Cell,因为你的id是基本类型,实现了Copy trait,故可以用Cell。如果是非基本类型,比如String,使用RefCell。

let s = student::student::new("my name");
println!("{}", s.id.get());
d.id.set(3);
songzhi 2019-08-28 17:35

Rust里无法控制字段的可变性,所以应该就只有不pub出id才能实现这个功能.

1 共 3 条评论, 1 页