Поскольку ваша основная жалоба на первую версию заключается в том, что она слишком многословна, вот попытка уменьшить многословие с помощью макроса:
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()
}
Я не знаю, будет ли это "идиоматическим"", но это в основном вопрос предпочтений в подобных случаях.Лично я не слишком возражаю против многословия, но, возможно, немного сократю список аргументов до
&["baz".as_ref(), "qux".as_ref(), file]