Идиоматический способ присвоения значения из условия if else в Rust - PullRequest
0 голосов
/ 31 декабря 2018

Каков предпочтительный способ создания или присвоения одного из нескольких объектов переменным внутри конструкции «если - еще» в Rust?Из-за области видимости, похоже, переменная должна быть создана вне if - else.Ни один из способов, о которых я думал, не кажется мне очень приятным.Используя строки в качестве примера, вот один способ, но он генерирует предупреждение о неиспользованном назначении:

let mut s = String::new();
if condition {
    s = "first".to_string();
} else {
    s = "second".to_string();
}

Другая альтернатива это:

let mut s = "second".to_string();
if condition {
    s = "first".to_string();
}

Это короче и не генерируетпредупреждение, но означает, что s назначается дважды, и означает, что "second".to_string() выполняется, но теряется, если condition имеет значение true.Если бы вместо простого создания строки это были дорогостоящие операции (возможно, с побочными эффектами), этот метод не подойдет.

Есть ли лучшая альтернатива?

1 Ответ

0 голосов
/ 31 декабря 2018

В Rust блок if / else является выражением.То есть сам блок имеет значение, эквивалентное последнему выражению в любом разделе, который был выполнен.Имея это в виду, я бы структурировал ваш код следующим образом:

let s = if condition {
    "first"
} else {
    "second"
}.to_string();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...