Rust中的一些细节问题
1. ?操作符
// 由于Rust中没有Exception异常处理的语法,
// Rust只有panic报错, 并且panic不允许被保护, 因为没有提供 try 这种语法.
// Rust的异常处理是通过 Result 的 Ok 和 Err 成员来传递和包裹错误信息.
// 然而错误信息的处理一般都是要通过match来对类型进行比较, 所以很多时候
// 代码比较冗余, 通过?符号来简化Ok和Err的判断.
pub fn new() -> Result<Self> {
// Open `/dev/kvm` using `O_CLOEXEC` flag.
let fd = Self::open_with_cloexec(true)?;
// Safe because we verify that ret is valid and we own the fd.
Ok(unsafe { Self::new_with_fd_number(fd) })
}
参考文献: https://blog.youkuaiyun.com/weixin_33953249/article/details/87053779
2. module路径
Rust 提供了 self 和 super 两个关键字:
self关键字
(1)use self::xxx 表示,加载当前模块中的 xxx。此时 self 可省略;
(2)use xxx::{self, yyy},表示,加载当前路径下模块 xxx 本身,以及模块 xxx 下的 yyy;
super关键字
super 表示当前模块路径的上一级路径,可以理解成父模块,比如use super::xxx;
::xxx::yyy
一种特殊路径表示方式,比如::xxx::yyy
,表述引用根路径下的 xxx::yyy,这个根路径,指的是当前 crate 的根路径。
路径中的 * 符号:use xxx::*;
,表示导入 xxx 模块下的所有可见 item(加了 pub 标识的 item)。
参考文献:https://wiki.jikexueyuan.com/project/rust-primer/module/module.html