我希望能够转换
Some
到
None
,如果某个特定条件对于some中的值成立。
例如,如果我有
Some(false)
它应该变成
没有一个
虽然
Some(true)
应保持为
有些(真的)
我找到了一些方法。
let value1: Option<bool> = Some(false);
let value2: Option<bool> = Some(true);
let result1 = value1.and_then(|inner| if inner == false { None } else { Some(inner) });
let result2 = value2.and_then(|inner| if inner == false { None } else { Some(inner) });
println!("{:?}", result1); // Prints "None"
println!("{:?}", result2); // Prints "Some(true)"
甚至这个
let value1: Option<bool> = Some(false);
let value2: Option<bool> = Some(true);
let result1 = if let Some(false) = value1 { None } else { value1 };
let result2 = if let Some(false) = value2 { None } else { value2 };
println!("{:?}", result1); // Prints "None"
println!("{:?}", result2); // Prints "Some(true)"
环顾文档,我找不到一种更简洁的方法。
有点像
let value = Some(v).to_none_if(predicate)
where value will be None, if predicate is true
or value will remain Some(v) if predicate is false
Rust中进行这种类型转换的最惯用方法是什么?