Builder pattern - borrowed value does not live long enough
我正在尝试实现一个简单的生成器,但是却要竭尽全力。 以下是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | struct Type<'a> { s: &'a String, } struct TypeBuilder { s: String, } impl TypeBuilder { fn new() -> TypeBuilder { TypeBuilder { s:"".to_string() } } fn s(&mut self, s: String) -> &mut TypeBuilder { self.s = s; self } fn finalize(&self) -> Type { Type { s: &self.s } } } fn main() { let t = TypeBuilder::new() .s("a".to_string()) .finalize(); println!("string: {}", t.s); } |
问题是您要使用基于
使用构建器的方法存在的问题是,构建器是其构建的值的数据所有者:
因此,为了使构建器模式正确运行,您的
1 2 3 | struct Type { s: String, } |
然后,应该按值传递构建器,然后按
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | impl TypeBuilder { fn new() -> TypeBuilder { TypeBuilder { s:"".to_string() } } fn s(mut self, s: String) -> TypeBuilder { self.s = s; self } fn finalize(self) -> Type { Type { s: self.s } } } |
这样,您的建筑代码应该可以完全正常工作。