Я столкнулся с интересной ситуацией, когда Rust не может правильно вывести тип значения во время инициализации, даже если он указан. Начнем с примеров:Неоднозначность типа во время инициализации
Это нормально:
let level: log::LogLevelFilter = {
let mut level = log::LogLevelFilter::Debug;
if env::var("TRACE_ENABLED").is_ok() {
level = log::LogLevelFilter::Trace;
}
level
};
Это не так: текст
let level: log::LogLevelFilter = {
if env::var("TRACE_ENABLED").is_ok() {
return log::LogLevelFilter::Trace
}
log::LogLevelFilter::Debug
};
Ошибка:
src/main.rs:26:20: 26:46 error: mismatched types:
expected `()`,
found `log::LogLevelFilter`
(expected(),
found enum `log::LogLevelFilter`) [E0308]
src/main.rs:26 return log::LogLevelFilter::Trace
^~~~~~~~~~~~~~~~~~~~~~~~~~
src/main.rs:26:20: 26:46 help: run `rustc --explain E0308` to see a detailed explanation
Что здесь не так? Я думаю, что я написал код, как это, без каких-либо проблем.
Shorter example with similar problem.
'return log :: LogLevelFilter :: Trace' означает, что вы возвращаетесь от текущей функции. Поэтому возвращаемый тип функции должен совпадать. – WiSaGaN