gpt4 book ai didi

initialization - 如何用 Rust 初始化列表中的另一个值初始化值?

转载 作者:行者123 更新时间:2023-11-29 08:34:53 27 4
gpt4 key购买 nike

例如我们可以取this code:

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() {

}

但在我看来这是愚蠢的,因为我在这里做了无用的额外工作,以后我需要总是解包这个选项。有什么方法可以更简单地做到这一点?

最佳答案

先创造值(value)怎么样?

impl C {
fn new() -> C {
let tmp = Rc::new(B);
C {
b: tmp.clone(),
a: A::new(tmp),
}
}
}

关于initialization - 如何用 Rust 初始化列表中的另一个值初始化值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37584952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com