gpt4 book ai didi

arrays - 传递 `OsStr` 数组的惯用方法

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

传递或表示 &[&OsStr] 的惯用方式是什么?这种方式似乎有很多不必要的文字:

fn foo(file: &OsStr) {
Command::new("bar")
.args(&[OsStr::new("baz"), OsStr::new("qux"), file])
.spawn();
}

这种方式看起来更干净,而且是how it is done in some of the documentation .但是,file.to_str().unwrap() 让人分心,将 OsStr 转换为 str 只是为了转换很奇怪它返回到 OsStr

fn foo(file: &OsStr) {
Command::new("bar")
.args(&["baz", "qux", file.to_str().unwrap()])
.spawn();
}

还有第三种选择吗?

最佳答案

由于您对第一个版本的主要提示是它过于冗长,这里尝试使用宏来减少冗长:

macro_rules! args {
($($a:expr),*) => {
&[
$(<AsRef<OsStr>>::as_ref(&$a),)*
]
}
}


pub fn foo(file: &OsStr) -> Result<Child> {
Command::new("bar")
.args(args!["baz", "qux", file])
.spawn()
}

我不知道这是否是“惯用的”,但这主要是在这种情况下的偏好问题。我个人不介意过于冗长,但也许可以将 args 列表略微缩短为

&["baz".as_ref(), "qux".as_ref(), file]

关于arrays - 传递 `OsStr` 数组的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782350/

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