- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
传递或表示 &[&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/
我想定义一个 OsStr 常量来进行多次扩展比较。例如: const DCM_EXTENSION: Option = Some("dcm"); const DCM_EXTENSION: Option
我正在尝试为文件路径创建一个新名称。一切正常,除了当我尝试格式化 OsStr 时,它会自动将它们放在引号中。这让我发疯了几个小时,无论我使用 {:?} 格式还是 {:#?},它都没有改变任何事情。我也
传递或表示 &[&OsStr] 的惯用方式是什么?这种方式似乎有很多不必要的文字: fn foo(file: &OsStr) { Command::new("bar") .ar
我正在尝试匹配一个文件扩展名: let file_path = std::path::Path::new("index.html"); let content_type = match file_pa
我正在编写一些使用 ? 的 Rust 代码运算符(operator)。这是该代码的几行: fn files() -> Result, Box> { let mut file_paths: Ve
我正在使用 rust-fuse ,它将挂载选项作为 &[&std::ffi::os_str::OsStr]。看来我应该拆分传入的以逗号分隔的选项字符串,我这样做是这样的: mod fuse {
我在 Windows 上有一个 std::ffi::OsString,但我需要将一个 std::ffi::CString 传递给 FFI 函数。有什么方法可以将 OsString 转换为 CStrin
这个问题在这里已经有了答案: What is the right way to allocate data to pass to an FFI call? (1 个回答) Calling the G
我有一个函数接受带有参数 data: *const u8, length: usize 的回调,它表示一些路径。从中创建 OsStr(ing) 的正确方法是什么? OsStrExt 中有from_by
这是我目前尝试遍历一个目录并向 map 添加文件类型扩展名并计算有多少文件具有该扩展名类型。 to_str() 调用失败,因为 no method named `to_str` found for t
我正在尝试将原始操作系统文件名保存到存储中,因此我需要获取 OsStr 的原始字节。 似乎可以调用as_bytes()在 *nix 平台上,但未在 MS Windows 上定义。 是否有一种可移植的方
为什么调用这个函数: use std::string::ToString; use std::ffi::OsString; fn len(v: &T) -> usize { v.to_stri
我是一名优秀的程序员,十分优秀!