2
mod root {
mod foo {
pub struct Foo {
i: i32,
}
}
mod bar {
pub struct Bar {
f: ::root::foo::Foo,
}
impl Bar {
pub fn new(i: i32) -> Self {
Bar { f: ::root::foo::Foo { i: i } }
}
}
}
}
fn main() {}
用户私有字段应该能够与Foo
互动,但用户不应该能够手动构建它,因为它是不安全的。
模块bar
应该仍然能够构建Foo。据我所知,要做到这一点的唯一方法是将Foo
放入root
模块或bar
模块中。
有没有更简单的方法来解决这个问题?我在这里命名模块foo
和bar
,但在我的代码中它们是单独的文件,如foo.rs
bar.rs
。是否可以将foo.rs
bar.rs
放在同一个模块中,以便他们可以看到私有字段,但仍然可以在单独的文件中生存?
我目前的解决方法是为Foo公开一个公开的不安全的new
方法。
为什么不写一个'Foo :: new'函数来安全地创建'Foo'? –
你能为你想访问的私有变量设置一个getter吗?这样你可以防止任何形式的访问。 你也可以在Foo的构造函数中做这样的事情(所以使用new),只有在满足某种条件时它才会成功,就像所需的构造函数arg必须是一个符合条件的实例组件等。如果不提供特定类型的特定实例,则不能构造该组件,并且如果已经构建该组件,则不要创建新组件,还要返回现有组件或其他组件。 –