Ich versuche, das builder pattern in Rust zu verwenden, jedoch erhalte ich einen Kompilierungsfehler.Kann nicht ein Rust-Builder-Muster kompilieren, weil ein geliehener Wert nicht lange genug lebt
pub struct DynamicParams {
port: Option<u16>,
}
impl DynamicParams {
pub fn new() -> Self {
DynamicParams { port: None }
}
pub fn port(&mut self, port: u16) -> &mut Self {
self.port = Some(port);
self
}
}
fn main() {
let params = DynamicParams::new().port(1);
}
Es ist available on play.rust-lang.org.
Fehler:
error: borrowed value does not live long enough
--> <anon>:17:18
|>
17 |> let params = DynamicParams::new().port(1);
|> ^^^^^^^^^^^^^^^^^^^^ does not live long enough
note: reference must be valid for the block suffix following statement 0 at 17:46...
--> <anon>:17:47
|>
17 |> let params = DynamicParams::new().port(1);
|> ^
note: ...but borrowed value is only valid for the statement at 17:4
--> <anon>:17:5
|>
17 |> let params = DynamicParams::new().port(1);
|> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider using a `let` binding to increase its lifetime
--> <anon>:17:5
|>
17 |> let params = DynamicParams::new().port(1);
|> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
jedoch so nahe wie ich sehe, das ist sehr ähnlich die builder pattern, as described in the Rust book. Was ist los? Was mache ich falsch?
Ich benutze Rust 1.11.
Danke! Ich habe meine Getter-Methoden geändert, um an eigenen Objekten zu arbeiten und diese zurückzugeben. Keine Referenzen. Dann brauche ich das '.finalize()' nicht – Rory