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() {}
playgroundZugriff auf private Felder aus verschiedenen Modulen
Der Benutzer sollte mit Foo
zu interagieren können, aber der Benutzer sollte es nicht manuell in der Lage zu bauen, weil es nicht sicher ist.
Das Modul bar
sollte immer noch in der Lage sein, Foo zu konstruieren. Soweit ich weiß, ist der einzige Weg, dies zu tun, Foo
innerhalb der root
-Modul oder innerhalb der bar
-Modul.
Gibt es eine sauberere Möglichkeit, dieses Problem zu lösen? Ich nannte die Module hier foo
und bar
, aber in meinem Code sind sie separate Dateien wie foo.rs
bar.rs
. Ist es möglich, foo.rs
bar.rs
in das gleiche Modul zu setzen, so dass sie die privaten Felder sehen können, aber immer noch in separaten Dateien leben?
Meine aktuelle Problemumgehung war eine öffentliche unsichere new
Methode für Foo verfügbar machen.
Warum schreibst du nicht eine 'Foo :: new' Funktion, die ein' Foo' sicher erstellt? –
Könnten Sie einfach einen Getter für die private Variable einrichten, auf die Sie zugreifen möchten? Auf diese Weise können Sie sich vor jeder Art von Zugriff schützen. Sie können auch etwas tun, im Konstruktor von Foo (also mit neuen), die Konstruktion so Tor, dass es nur gelingt, wenn eine Bedingung einer Art erfüllt ist, wie der erforderliche Konstruktor arg muss eine Instanz eines Qualifying sein Komponente usw. Sie können die Komponente nicht konstruieren, ohne eine bestimmte Instanz eines bestimmten Typs bereitzustellen, und wenn sie bereits erstellt wurde, erstellen Sie keine neue, geben Sie die vorhandene nicht zurück, oder eine andere. –