如何从子模块中的结构访问私有字段?

How can I access a private field from a struct in a submodule?

我想将我的 Rust 模块拆分成单独的文件。所以我使用了一个子模块。问题是我无法从子模块中定义的结构访问私有字段。这是一个例子:

// mod1.rs
mod point;

struct Point1 {
    x: i32,
    y: i32,
}

impl Point1 {
    pub fn new(x: i32, y: i32) -> Point1 {
        Point1 { x: x, y: y }
    }
}

pub fn run() {
    let a = Point1::new(1, 2);
    let b = point::Point2::new(3, 4);

    println!("{}, {}", a.x, a.y); // 1, 2
    println!("{}, {}", b.x, b.y); // error
}

// point.rs
pub struct Point2 {
    x: i32,
    y: i32,
}

impl Point2 {
    pub fn new(x: i32, y: i32) -> Point2 {
        Point2 { x: x, y: y }
    }
}

如何将代码拆分到单独的文件中并仍然访问结构的私有成员?

您可以使用 pub (super) 只对其父模块制作一些东西 public。

pub struct Point2 {
    pub (super) x: i32,
    pub (super) y: i32,
}

查看 Visibility and Privacy 上的 Rust 文档。