gpt4 book ai didi

rust - 从 &str 转换为 OsStr 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 08:22:30 27 4
gpt4 key购买 nike

我正在使用 rust-fuse ,它将挂载选项作为 &[&std::ffi::os_str::OsStr]。看来我应该拆分传入的以逗号分隔的选项字符串,我这样做是这样的:

mod fuse {
use std::ffi::OsStr;

pub fn mount(options: &[&OsStr]) {}
}

fn example(optstr: &str) {
let mut options: &[&str] = &[];
if optstr != "" {
options = optstr.split(",").collect::<Vec<_>>().as_slice();
}
fuse::mount(options)
}

这给出了以下错误:

error[E0308]: mismatched types
--> src/main.rs:12:17
|
12 | fuse::mount(options)
| ^^^^^^^ expected struct `std::ffi::OsStr`, found str
|
= note: expected type `&[&std::ffi::OsStr]`
found type `&[&str]`

我的印象是所有 &str 也是 OsStr,但我是 Rust 的新手,所以我想这是错误的。

最佳答案

使用 OsStr::new :

use std::ffi::OsStr;

fn main() {
let a_string: &str = "Hello world";
let an_os_str: &OsStr = OsStr::new(a_string);
println!("{:?}", an_os_str);
}

请注意,显式类型规范不是必需的,我只是出于教育目的将其包括在内。

在您的具体情况下:

let options: Vec<_> = optstr.split(",").map(OsStr::new).collect();
fuse::mount(&options)

然而,实际上很少需要明确地执行此操作。大多数时候,函数接受一个实现了 AsRef<OsStr> 的类型。 .这将使您无需考虑就可以传递更多类型。您可能需要考虑询问维护者或向库提交补丁以使其更通用。

关于rust - 从 &str 转换为 OsStr 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023250/

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