Оператор ?
заставит функцию, содержащую его, вернуть None
, если значение, к которому применяется ?
, равно None
.
Это означает, что вы можете написать
fn not_main() -> Option<()> {
println!("{}", std::env::args().nth(3)?);
Ok(())
}
, поскольку nth
возвращает Option<Item>
, а not_main
возвращает Option<()>
.
Однако ваш main
не возвращает Option
, поэтому ?
не может работать внутри него.
То, как вы обойдете это, будет зависеть от того, что вы хотите сделатьв случае отсутствия аргумента.Самое жестокое решение - вместо этого unwrap
- что вызовет панику в вашем коде.
fn main() {
println!("{}", env::args().nth(3).unwrap())
}
Альтернативой является сопоставление и обработка пропущенного регистра
fn main() {
match std::env::args().nth(3) {
Some(ref v) => println!("{}", v),
None => println!("Missing argument"),
}
}
, начиная с Option
поддерживает Debug
вы можете распечатать отладочную версию - которая выдаст None
или Some("arg3")
.
fn main() {
println!("{:?}", std::env::args().nth(3));
}