Option
unwrap_or_else 接收一个FnOnce。
FnOnce 特性代表可以被调用一次并且消耗捕获变量的闭包或函数。所有的闭包至少实现了 FnOnce,因为所有闭包都可以被调用一次。
FnMut: 可修改捕获环境且多次调用闭包。
Fn: 仅对捕获环境不可变访问且多次调用。
pub fn unwrap_or_else<F>(self, f: F) -> T
where
F: FnOnce() -> T,
{
match self {
Some(x) => x,
None => f(),
}
}
测试:
let y4 = None;
print!("{}", y4.unwrap_or_else(|| "xxx"));
unwrap_unchecked 是 Rust 中一个特性,用于在运行时禁用安全检查来解包 Option 或 Result 类型。它类似于常用的 unwrap 方法,但不同之处在于,unwrap_unchecked 是一个不安全的操作,如果在 None 或 Err 的情况下使用会导致未定义的行为和严重的内存崩溃。
let y = Some("hello world");
unsafe { println!("{}", y.unwrap_unchecked()); }
//map 返回也是option,可以解决null的问题吧
println!("{}", y.map(|x| {
let x = String::from(x);
x.len()
}).unwrap());
let result = xx.and(Some(9));
let r: Option<i32> = result.and_then(|x| Some(x + 1)).and_then(|_| None).and_then(|x| Some(x));
这些方法都会消耗所有权的, as_ref可以解决消耗所有权
let xx = Some(String::from("xxx"));
// println!("{}", xx.clone().filter(|x| x.len() > 0).unwrap_or_default());
print!("{}", xx.unwrap());
match xx {
Some(x) => println!("{}", x),
None => println!("none")
}
println!("{}", xx.as_ref().unwrap());
具体来说,Vec<T> 类型提供了 as_slice 方法,而 Option 类型提供了 as_deref 方法
let opt_vec: Option<Vec<i32>> = Some(vec![1, 2, 3, 4, 5]);
let opt_slice: Option<&[i32]> = opt_vec.as_deref();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。