Ich versuche, eine änderbare Referenz nach einer Operation darauf zurückzugeben. Dies wird am besten durch ein Stück Code erklärt:Elegante Möglichkeit zum Ausleihen und Zurückgeben einer veränderbaren Referenz in Rust
#[derive(PartialEq)]
pub enum Value {
Null,
Array(Vec<Value>),
}
impl Value {
pub fn new() -> Value {
Value::Array(Vec::new())
}
pub fn push<'a, T> (&'a mut self, value: T) -> Option<&'a mut Value>
where T:Into<Value> {
let temp = match *self {
Value::Array(ref mut vec) => {
vec.push(value.into());
true
},
_ => false,
};
if temp {
Some(self)
} else {
None
}
}
}
#[test]
fn push_test() {
let mut val = Value::new();
val.push(Value::Null);
assert!(val == Value::Array(vec![Value::Null]));
}
Die Play-Version ist here. Die Problemumgehung mit booleschen Werten liegt darin, dass ich mehrere Male ausleihen würde, wenn ich Some(self)
aus dem Block match
zurückgebe. Gibt es eine elegante Möglichkeit, die push
-Funktion ohne Verwendung boolescher Werte zu implementieren? Wenn es möglich ist, die Funktionssignatur zu behalten, dann ist das ein Bonus. Vielen Dank!