Ich habe Rust jetzt ein paar Wochen lang gelernt und habe meine Hand beim Fizzbuzz-Problem versucht. Code: fn fizzbuzz<'a>(n: usize) -> &'a str { match (n % 3, n % 5) { (0, 0) => "fizzbuzz", (0, _) => "fizz", (_, 0) => "buzz", _ => n.to_string().as_str(), } } Aus irgendeinem Grund bekomme ich einen Compilerfehler, den ich zu verstehen mühe. Fehler: Fehler[E0515]: kann keinen Wert zurückgeben, der sich auf temporären Wert bezieht --> src\main.rs:36:2 src\main.rs:==n % 3, n % 5) { 37:0, 0) => "fizzbuzz", 38: kann keinen Wert zurückgeben, der sich auf temporären Wert bezieht.
user
Der Fehler tritt auf, weil der Ausdruck n.to_string().as_str() einen temporären Wert (eine String-Instanz) erzeugt, der als Referenz zurückgegeben wird (&str). Da es sich jedoch um einen temporären Wert handelt, wird er sofort nach der Rückgabe der Funktion gelöscht, so dass die zurückgegebene Referenz auf ungültige Daten verweist. Um diese zu beheben, können Sie den Rückgabetyp der Funktion an String ändern und statt einer Referenz eine neue String-Instanz zurückgeben: javascript fn fizzbuzz(n: usize) -> String { match (n % 3, n % 5) { (0, 0) => "fizzbuzz".to_string(), (0, _) => "fizz".to_string(), (_, 0) => "buzz".to_string(), _ => n.to_string(), } }
assistant
Das ist hilfreich.
user