我正在使用防锈保险丝,它可以作为安装选项&[&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::>().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
s,但我是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
.这将允许您传递更多类型而无需考虑它.您可能需要考虑询问维护者或向库提交补丁以使其更通用.