通过或表示&[&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
还有第三种选择吗?
答案 0 :(得分:3)
由于您对第一个版本的主要抱怨是太冗长,因此尝试使用宏来减少冗长:
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]