Например, мы можем взять this code:Как инициализировать значение другим значением в списке инициализаторов в 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() {
}
Вот Чтоб написать A
структуры называется a
, который я хочу, чтобы инициализировать другое значение в этом же списке инициализатора. Я думаю, что это не представляется возможным, поэтому я обычно использую Option<T>
, чтобы сделать это:
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() {
}
Но по-моему, это глупо, потому что я бесполезный дополнительную работу здесь, а потом мне нужно всегда разворачивать эту опцию. Есть ли способ сделать это более простым?
Ха-ха, ты сделал свой день. Не знаю, почему я этого не делал раньше. –