gpt4 book ai didi

rust - 如何返回第一个非空字符串?

转载 作者:行者123 更新时间:2023-11-29 07:56:07 28 4
gpt4 key购买 nike

以下 Python 代码返回第一个非空字符串(在本例中为 bar 的内容):

foo = ""
bar = "hello"
foo or bar # returns "hello"

我如何用 Rust 编写它?我试过这个:

let foo = "";
let bar = "";
foo || bar;

但是我明白了

error[E0308]: mismatched types
--> src/main.rs:4:5
|
4 | foo || bar;
| ^^^ expected bool, found &str
|
= note: expected type `bool`
found type `&str`

我想我不能用 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 }
}
}

现在你可以像这样使用它:

assert_eq!("foo".or("bar"), "foo");
assert_eq!("".or("").or("baz").or("").or("quux"), "baz");

如果您需要确保延迟评估第二个参数,您可以使用以下方法扩展 Or 特性:

fn or_else<F: FnOnce() -> Self>(self, f: F) -> Self;

参见 Option 的类似方法:Option#orOption#or_else了解更多详情。

关于rust - 如何返回第一个非空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45343320/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com