Unwrap_ или нужна строка или & str в ржавчине? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь проанализировать значение окружения; используя std::env следующим образом

let environment = env::var("SENSIBULL_ENVIRONMENT").unwrap();

Возвращает строку в переменную environment. Если я хочу передать значение по умолчанию, тогда я должен использовать следующий код

let environment = env::var("SENSIBULL_ENVIRONMENT").unwrap_or("development".into());

, но я ожидал сделать это как

let environment = env::var("SENSIBULL_ENVIRONMENT").unwrap_or("development");

, как упомянуто в Rust пример

Но затем отображается ошибка String expected but found &str

Почему эта ошибка не возникает в примере кода?

1 Ответ

3 голосов
/ 23 апреля 2020

В Rust строковые литералы имеют тип &str, а переменные среды имеют тип String. По сути, &str s имеют фиксированный размер, в то время как String s могут динамически изменяться и изменяться в размере (подробнее здесь ). unwrap_or требует, чтобы альтернативное значение было того же типа, что и значение параметра, что означает, что вы должны предоставить String, чтобы соответствовать типу переменной среды. Вот почему вы должны вызвать .into, чтобы преобразовать его в строку. В их примере опция использует строковый литерал, который также имеет тип &str, поэтому ошибок нет.

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