在Swift中,!表示展开可选值(可能值).

推荐答案

println!不是函数,而是macro.宏使用!来区分它们与普通方法调用.The documentation包含更多信息.

另见:


Rust使用Option类型表示可选数据.它有一个unwrap方法.

Rust 1.13添加了问号运算符?,作为try!宏的模拟(最初通过RFC 243提出).

关于问号运算符的一个很好的解释是The Rust Programming Language.

fn foo() -> Result<i32, Error> {
    Ok(4)
}

fn bar() -> Result<i32, Error> {
    let a = foo()?;
    Ok(a + 4)
}

问号运算符也是extends to Option,因此您可能会看到它用于展开值或从函数返回None.这与仅仅展开不同,因为程序不会死机:

fn foo() -> Option<i32> {
    None
}

fn bar() -> Option<i32> {
    let a = foo()?;
    Some(a + 4)
}

Rust相关问答推荐

rust 蚀生命周期 行为

这个规则关于或模式到底是什么意思?如果表达片段的类型与p_i|q_i...&q;不一致,就会形成

当一个箱子有自己的依赖关系时,两个人如何克服S每箱1库+n箱的限制?

为什么reqwest以文本形式下载二进制文件?

编译项目期间使用Cargo生成时出现rustc错误

如何实现Serde::Ser::Error的调试

JSON5中的变量类型(serde)

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

如何轮询 Pin>?

如何处理闭包中的生命周期以及作为参数和返回类型的闭包?

Rust 并行获取对 ndarray 的每个元素的可变引用

当锁被释放时,将锁包装到作用域中是否会发生变化?

如何从 rust 中的同一父目录导入文件

为什么 i32 Box 类型可以在 Rust 中向下转换?

SDL2 没有在终端键上触发?

使用部分键从 Hashmap 中检索值

在空表达式语句中移动的值

在 Rust 中获得准确时间的正确方法?

如何将 u8 切片复制到 u32 切片中?

在特征中返回一个 Self 类型的值