rust自引用
参考:
什么是自引用,如下面代码所示:
1 | struct SelfRef<'a> { |
但是这个代码会报错,因为我们试图同时使用值和值的引用,最终所有权转移和借用一起发生了
rust的结构体的成员默认是私有的,但是在rust中同一个模块下定义的结构体,即使它的成员是私有的,同一个模块下的函数也能对其进行访问。。。看下面的例子,被坑了好久:
1 |
|
Option的map用法
1 | pub fn map<U, F>(self, f: F) -> Option<U> where F: FnOnce(T) -> U, |
通过将函数应用于包含的值,将 Option<T>
映射到
Option<U>
。
1 | let maybe_some_string = Some(String::from("Hello, World!")); |
unwrap_or 和 unwrap_or_else 都是用于从 Result (Option也可以?)对象中获取值的宏。
当 Result 对象是 Ok 时,两者都会返回 Ok 中的值。但是当 Result 对象是 Err 时,两者的行为不同:
unwrap_or 将返回一个默认值。这个默认值是宏的参数,在调用 unwrap_or 时就已经确定了。
unwrap_or_else 将调用一个闭包,并返回闭包的结果。这个闭包是宏的参数,在调用 unwrap_or_else 时就已经确定了。
所以,当你想要在 Err 时使用固定的默认值时,就可以使用 unwrap_or;而当你想要在 Err 时使用可变的值时,就可以使用 unwrap_or_else。
示例代码:
1 | let x: Result<i32, &str> = Err("error message"); |