gpt4 book ai didi

rust - 您如何创建部分初始化的结构?

转载 作者:行者123 更新时间:2023-11-29 07:44:25 24 4
gpt4 key购买 nike

在 Rust 中创建一个结构时,似乎很难在没有设置所有字段的情况下创建一个结构。例如使用以下代码

struct Connection {
url: String,
stream: TcpStream
}

您无法设置 url不给stream

// Compilation error asking for 'stream'
let m = Connection { url: "www.google.com".to_string() };

您如何创建这些可能是 Option<None> 的引用直到稍后?

我发现最好的是使用 Default特征,但我宁愿不必创建 TcpStream直到比初始化结构更晚的时间。我能用类似 Box 的东西来做到这一点吗? ?

最佳答案

您可以做的一件事是包装 TcpStreamOption ,即 Option<TcpStream> .当您第一次构建结构时,它将是 None ,当你初始化它时,你将它设为 self.stream = Some(<initialize tcp stream>) .无论您在哪里使用 TCPStream , 你必须检查它是否是 Some ,即如果它已经被初始化。如果你能保证你的行为,那么你就可以 unwrap() , 但最好还是进行检查。

struct Connection {
url: String,
stream: Option<TcpStream>
}

impl Connection {
pub fn new() -> Connection {
Connection {
url: "www.google.com".to_string(),
stream: None,
}
}

pub fn initialize_stream(&mut self) {
self.stream = Some(TcpStream::connect("127.0.0.1:34254").unwrap());
}

pub fn method_that_uses_stream(&self) {
if let Some(ref stream) = self.stream {
// can use the stream here
} else {
println!("the stream hasn't been initialized yet");
}
}
}

如果您熟悉 Swift 语言,这与在 Swift 中所做的类似。

关于rust - 您如何创建部分初始化的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30389043/

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