Мое требование - вернуть массив из 5 строк в моем методе cal c. В моем основном методе я создаю любой произвольный массив из 10 элементов, который я хочу для своей программы.
Я передаю этот массив в качестве параметра методу cal c, он выполняет некоторые вычисления, я просто пытаюсь выяснить Как я могу получить массив из 5 строковых срезов, как мне требуется.
Поскольку я могу вернуть любой из двух массивов (срезов строковых типов) на основании полученных вычислений, я пытаюсь вернуть соответствующий массив, используя лестницу if else if.
fn main()
{
let arr:[u32;10] = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
let output:[&str;5] = calc(arr);
println!("{:?}", output);
}
fn calc(arr: [u32;10]) -> [&'static str; 5]
{
let mut str1:[&str;5] = ["", "", "", "", ""];
let mut str2:[&str;5] = ["", "", "", "", ""];
let mut arr1 = [0; 5];
let mut arr2 = [0; 5];
let mut sorted_arr1 = arr1;
let mut sorted_arr2 = arr2;
sorted_arr1.sort();
sorted_arr2.sort();
for i in 0..5
{
arr1[i] = arr[i];
arr2[i] = arr[i+5];
}
//L for less than, E for equal to, G for greater than
for i in 0..5
{
if arr1[i] < 5 {
str1[i] = &format!("{}{}", arr1[i], "L").to_string();
}
else if arr1[i] == 5 {
str1[i] = &format!("{}{}", arr1[i], "E").to_string();
}
else if arr1[i] > 5 {
str1[i] = &format!("{}{}", arr1[i], "G").to_string();
}
if arr2[i] < 5 {
str2[i] = &format!("{}{}", arr2[i], "L").to_string();
}
else if arr2[i] == 5 {
str2[i] = &format!("{}{}", arr2[i], "E").to_string();
}
else if arr2[i] > 5 {
str2[i] = &format!("{}{}", arr2[i], "G").to_string();
}
}
let foo1_winner = foo1();
let foo2_winner = foo2();
if foo1_winner == sorted_arr1 {
return str1;
}
else if foo1_winner == sorted_arr2 {
return str2;
}
else if foo2_winner == sorted_arr1 {
return str1;
}
else if foo2_winner == sorted_arr2 {
return str2;
}
return str1;
}
fn foo1() -> [u32; 5]
{
[1,2,3,4,5]
}
fn foo2() -> [u32; 5]
{
[6,7,8,9,10]
}
Для всех моих операторов return я получаю ошибку компиляции, подобную этой
/*
error[E0515]: cannot return value referencing temporary value
--> stack.rs:71:16
|
43 | str1[i] = &format!("{}{}", arr1[i], "L").to_string();
| ----------------------------------------- temporary value created here
...
71 | return str1;
| ^^^^ returns a value referencing data owned by the current function
*/
Я искал решения этой проблемы, но не смог иметь смысл всего, что я прочитал. Как мне исправить эту проблему? Любая помощь приветствуется, спасибо.