Rust初心者です。基本的なアルゴリズムを実装してみようと考え、ソートアルゴリズム(挿入ソート)の実装にトライしました。しかし、タイトル通り、配列を受け取って配列を返す関数が上手く作れません。ライフタイムの関係でエラーが発生しているのは分かっているのですが、インターネットで調べたりドキュメントを読んだりしても全く解決しません。
Rust
1fn insert<'a, T: Ord+Clone>(x: T, v: &'a [T]) -> &'a [T] { 2 if v.len() == 0 { 3 &[x] 4 }else { 5 if x < v[0] { 6 let res = [&[x], v].concat(); 7 &res 8 }else { 9 let res = [&[v[0].clone()], insert(x, &v[1..])].concat(); 10 &res 11 } 12 } 13} 14 15fn isort<T: Ord+Clone>(v: &[T]) -> &[T] { 16 if v.len() == 0 { 17 &[] 18 }else { 19 let x = v[0].clone(); 20 insert(x, isort(&v[1..])) 21 } 22}
&[x]
の部分でtemporary value does not live long enough
、&res
の部分でborrowed value does not live long enough
というエラーが発生しています。insert関数の中で有効でも、返り値として使用すれば、関数のスコープを抜けた際にアクセス出来ないようになるためエラーを出しているということでしょうか?
また、この問題はVecを使うことで解決することが出来たのですが、出来るだけVecではなく配列を使うべきだという話をよく聞きます。なので、配列ではどのような実装をすれば良いのか教えていただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。