Ответ 1
println!
не является функцией, это макрос. Макросы используют !
, чтобы отличать их от обычных вызовов методов. В документации содержится дополнительная информация.
Rust использует Option
для обозначения необязательных данных. Он имеет unwrap
метод.
Ржавчина 1.13 добавила оператор вопросительного знака ?
в качестве аналога макроса try!
(изначально предлагаемого через RFC 243).
Отличное объяснение оператора вопросительного знака находится в Язык программирования ржавчины.
fn foo() -> Result<i32, Error> {
Ok(4)
}
fn bar() -> Result<i32, Error> {
let a = foo()?;
Ok(a + 4)
}
Оператор вопросительного знака также продолжается до Option
, поэтому вы можете увидеть, что он используется для разворачивания значения или возврата None
из функция. Это отличается от просто развертывания, поскольку программа не будет паниковать:
fn foo() -> Option<i32> {
None
}
fn bar() -> Option<i32> {
let a = foo()?;
Some(a + 4)
}