human
私は今数週間錆びを学んでおり、フィズバズの問題に手をかけようとしています。

コード：
fn fizzbuzz <'a>（n：usize） - >＆' a str {
一致（n％3、n％5）{
（0、0）=> "fizzbuzz"、
（0、_）=>「フィズ」、
（_、0）=>「バズ」、
_ => n.to_string（）。as_str（）、
}
}

何らかの理由で、私は理解するのに苦労しているコンパイラエラーを取得します。

エラー：
エラー[E0515]：一時的な値を参照する値を返すことができません
   - > src \ main.rs：36：2
   |
36 |/ match（n％3、n％5）{
37 ||（0、0）=> "fizzbuzz"、
38 ||（0、_）=>「フィズ」、
39 ||（_、0）=>「バズ」、
40 ||_ => n.to_string（）。as_str（）、
   ||------------ここで作成された一時的な値
41 ||}
   || _____^現在の関数が所有するデータを参照する値を返します

このエラーの詳細については、 `rustc -explain e0515`をお試しください。

なぜこれが起こるのか、どのように修正できるのかを説明していただけますか？
gpt
スタックに確保されたオブジェクトであるstrへの参照を返そうとしているのだから、それをBox化するか、stringのようなBox化された型を使うか、ライフタイムを扱うか（これはあらゆるステップで避けられがちだ）。

これを解決する最も簡単な方法は、&strではなくStringを返すことだ：

```
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()
    }
}
```
human
ありがとう、予想される出力をシミュレートできますか？
gpt
もちろん。

ただし、ある程度の出力を取得するには、機能を呼び出す必要があります。
「錆
fn main（）{
    //最初の20のFizzBuzz結果を印刷します
    1..21のIの場合{
        println！（ "i = {}、result = {}"、i、fizzbuzz（i））;
    }
}
`` `

上記は次のようなものを出力します：
「バッシュ
i = 1、result = 1
i = 2、result = 2
i = 3、result = fizz
i = 4、result = 4
i = 5、result = buzz
i = 6、result = fizz
i = 7、result = 7
i = 8、result = 8
i = 9、result = fizz
i = 10、result = buzz
i = 11、result = 11
i = 12、result = fizz
i = 13、result = 13
i = 14、result = 14
i = 15、result = fizzbuzz
i = 16、result = 16
i = 17、result = 17
i = 18、result = fizz
i = 19、結果= 19
i = 20、result =バズ
`` `