Ich fange gerade an, Rust zu lernen und durch das Rust-Buch zu arbeiten. Eines der Kapitel führt durch einige Beispiele und endet mit einem "Versuch, diese generische Art von vorgeschlagenen Übungen zu machen". Ich habe mir dabei total den Kopf zerbrochen. Die halbgenerischer Typ mit denen Sie beginnen, ist dies: „Wert“Zurückkehrender Verweis auf generischen Typ mit generischem Fn-Merkmal/Wert
struct Cacher<T>
where T: Fn(i32) -> i32
{
value: Option<i32>,
// leaving out rest for brevity
Dann habe ich so die Umwandlung dieser zu arbeiten, dass die Fn Charakterzug auch generisch ist, die auch die direkte Auswirkungen auf Also hier ist, was ich dachte:
struct Cacher<T, U>
where T: Fn(U) -> U
{
calculation: T,
value: Option<U>,
}
impl<T, U> Cacher<T, U>
where T: Fn(U) -> U
{
fn new(calculation: T) -> Cacher<T, U> {
Cacher {
calculation,
value: Option::None,
}
}
fn value(&mut self, arg: U) -> &U {
match self.value {
Some(ref v) => v,
None => {
let v = (self.calculation)(arg);
self.value = Some(v);
// problem is returning reference to value that was in
// v which is now moved, and unwrap doesn't seem to work...
},
}
}
}
Alle meine Probleme sind in der Fn-Wert Getter. Ich bin mir nicht sicher, ob ich bin oder schließe oder ich ging einfach den völlig falschen Weg runter. Also, wo gehe ich von den Schienen?
Ah, das ist es! Irgendwo in den Tutorials verpasste ich, dass das Auspacken ein * Move * war. Vielen Dank! – Chris