Par exemple, nous pouvons prendre this code:Comment initialiser la valeur par une autre valeur dans la liste d'initialisation dans Rust?
use std::rc::Rc;
struct B;
struct A {
obj: Rc<B>,
}
impl A {
fn new(obj: Rc<B>) -> A {
A {
obj: obj,
}
}
}
struct C {
b: Rc<B>,
a: A,
}
impl C {
fn new() -> C {
C {
b: Rc::new(B),
a: A::new(b.clone()),
}
}
}
fn main() {
}
est ici un membre struct A
appelé a
que je veux initialiser par une autre valeur dans la même liste d'initialisation. Je pense qu'il est impossible, donc je l'habitude d'utiliser Option<T>
pour le faire:
use std::rc::Rc;
struct B;
struct A {
obj: Rc<B>,
}
impl A {
fn new(obj: Rc<B>) -> A {
A {
obj: obj,
}
}
}
struct C {
b: Rc<B>,
a: Option<A>,
}
impl C {
fn new() -> C {
let mut c = C {
b: Rc::new(B),
a: None,
};
c.a = Some(A::new(c.b.clone()));
c
}
}
fn main() {
}
Mais à mon avis, c'est stupide parce que je fais un travail supplémentaire inutile ici et plus tard, je dois toujours déballer cette option. Y a-t-il un moyen de le faire plus simple?
Haha, vous avez fait ma journée. Je ne sais pas pourquoi je ne l'ai pas fait plus tôt. –