fn main() {
use std::fs::File;
use std::io::prelude::*;
fn foo() -> std::io::Result<()> {
let mut file = File::create("foo.txt")?; //здесь
file.write_all(b"Hello, world!")?; //здесь
Ok(())
}
}
Для чего нужен знак вопроса ?
expression? - это сокращенная запись для try!(expression). Описание макроса try! из руководства по Rust.
Вкратце. Если expression возвращает значение Err(err), то try! (или ?) выполняет немедленный выход из функции: return Err(err.into()). Если же значение expression - Ok(v), то макрос возвращает v и исполнение продолжается.