以下 Python 代码返回第一个非空字符串(在本例中为 的内容bar):
foo = ""
bar = "hello"
foo or bar # returns "hello"
Run Code Online (Sandbox Code Playgroud)
我如何用 Rust 编写它?我尝试过这个:
let foo = "";
let bar = "";
foo || bar;
Run Code Online (Sandbox Code Playgroud)
但我得到了这个
let foo = "";
let bar = "";
foo || bar;
Run Code Online (Sandbox Code Playgroud)
我想我不能用 Rust 轻松地完成我在 Python 中所做的事情?
您还可以创建一个扩展特征来添加您想要的行为:
trait Or: Sized {
fn or(self, other: Self) -> Self;
}
impl<'a> Or for &'a str {
fn or(self, other: &'a str) -> &'a str {
if self.is_empty() { other } else { self }
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以像这样使用它:
assert_eq!("foo".or("bar"), "foo");
assert_eq!("".or("").or("baz").or("").or("quux"), "baz");
Run Code Online (Sandbox Code Playgroud)
如果您需要确保第二个参数被延迟计算,您可以Or使用以下方法扩展该特征:
fn or_else<F: FnOnce() -> Self>(self, f: F) -> Self;
Run Code Online (Sandbox Code Playgroud)
Option有关更多详细信息,请参阅:Option#or和的类似方法Option#or_else。
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |