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必須是一個符合條件的實例組件等。如果不提供特定類型的特定實例,則不能構造該組件,並且如果已經構建該組件,則不要創建新組件,還要返回現有組件或其他組件。 –