6
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(())
   }
}

Для чего нужен знак вопроса ?

Kromster
  • 13,809
new
  • 157

1 Answers1

10

expression? - это сокращенная запись для try!(expression). Описание макроса try! из руководства по Rust.

Вкратце. Если expression возвращает значение Err(err), то try! (или ?) выполняет немедленный выход из функции: return Err(err.into()). Если же значение expression - Ok(v), то макрос возвращает v и исполнение продолжается.

red75prim
  • 436