Почему println! функция использует восклицательный знак в Rust?

В Swift ! означает разворачивание необязательного (возможное значение).

Ответы

Ответ 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)
}