2013-11-21 2 views
2

У меня есть следующий код:Rust «Не все пути управления возвращают значение» в выражении

//returns GREATER if x is greater than y 
//LESS if x is less than y 
//EQUAL if x == y 
fn less_or_greater(x: int, y: int) -> &str{ 
    let result = 
     if x == y { 
      "EQUAL" 
     } 
     else if x > y{ 
      "GREATER" 
     } 
     else { 
      "LESS" 
     }; 
    return result; 
} 

Как вернуться из этой функции, используя рекомендуемый Rust стиль не включая возвратное заявление? Если я не включаю его я получаю следующее сообщение об ошибке компиляции:

test.rc:29:0: 1:0 error: not all control paths return a value 
error: aborting due to previous error 

Я думаю, что эта проблема из-за мое отсутствие понимания «;» в Rust и различие между выражениями и утверждениями. Благодаря!

+3

Я надеюсь, что это была игрушка пример, и вы на самом деле не с помощью строки, как это вместо перечислений. 'std :: cmp :: Ordering' - это перечисление с вариантами' Less', 'Equal' и' Greater' и используется как возвращаемый тип метода TotalOrd.cmp. –

ответ

6

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

fn less_or_greater(x: int, y: int) -> &'static str { 
    if x == y { 
     "EQUAL" 
    } else if x > y { 
     "GREATER" 
    } else { 
     "LESS" 
    } 
} 
+2

Пока вы оставляете точку с запятой в конце заявления. Я не думаю, что это вводит новый пустой оператор без значения/единицы. –

 Смежные вопросы

  • Нет связанных вопросов^_^