Попытка вернуть массив строковых фрагментов в Rust, но я получаю ошибки, которые я не могу вернуть значения, ссылающиеся на временные значения - PullRequest
1 голос
/ 30 марта 2020

Мое требование - вернуть массив из 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
*/

Я искал решения этой проблемы, но не смог иметь смысл всего, что я прочитал. Как мне исправить эту проблему? Любая помощь приветствуется, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...