我希望能够将Some
转换为None
,如果某些特定条件对某些值成立的话.
例如,如果我有Some(false)
,它应该变成None
,而Some(true)
应该保持为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中,进行这种类型的转换最惯用的方式是什么?