gpt4 book ai didi

rust - 使用构建器模式的所有权错误

转载 作者:行者123 更新时间:2023-11-29 08:00:38 25 4
gpt4 key购买 nike

<分区>

我尝试按照 Builder pattern 编写一个 API这个例子已经简化了很多,但编译器仍然提示借来的值不够长。

#[derive(Debug)]
pub struct MediaType {
toptype: Option<String>,
subtype: Option<String>,
}

impl MediaType {
pub fn new() -> MediaType {
MediaType {
toptype: None,
subtype: None,
}
}

pub fn toptype<'a>(&'a mut self, toptype: Option<String>) -> &'a mut MediaType {
self.toptype = toptype;
self
}
pub fn subtype<'a>(&'a mut self, subtype: Option<String>) -> &'a mut MediaType {
self.subtype = subtype;
self
}
}


fn main() {
let mut tag = MediaType::new().toptype(Some("text".to_owned())).subtype(Some("html".to_owned()));
println!("{:?}", tag);
}

产生的错误信息是:

<anon>:27:20: 27:36 error: borrowed value does not live long enough
<anon>:27 let mut tag = MediaType::new().toptype(Some("text".to_owned())).subtype(Some("html".to_owned()));
^~~~~~~~~~~~~~~~
<anon>:27:103: 29:2 note: reference must be valid for the block suffix following statement 0 at 27:102...
<anon>:27 let mut tag = MediaType::new().toptype(Some("text".to_owned())).subtype(Some("html".to_owned()));
<anon>:28 println!("{:?}", tag);
<anon>:29 }
<anon>:27:5: 27:103 note: ...but borrowed value is only valid for the statement at 27:4
<anon>:27 let mut tag = MediaType::new().toptype(Some("text".to_owned())).subtype(Some("html".to_owned()));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<anon>:27:5: 27:103 help: consider using a `let` binding to increase its lifetime
<anon>:27 let mut tag = MediaType::new().toptype(Some("text".to_owned())).subtype(Some("html".to_owned()));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
playpen: application terminated with error code 101

都使用双衬里

let mut tag = MediaType::new();
tag.toptype(Some("text".to_owned())).subtype(Some("html".to_owned()));

并直接打印MediaType

println!("{:?}", MediaType::new().toptype(Some("text".to_owned())).subtype(Some("html".to_owned())));

工作。为什么借用检查器在直接使用该值时并没有提示并且我遵循了构建器模式示例时却提示了?

Rust Playground

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