当前位置:  开发笔记 > 后端 > 正文

将&str转换为OsStr的正确方法是什么?

如何解决《将&str转换为OsStr的正确方法是什么?》经验,为你挑选了1个好方法。

我正在使用防锈保险丝,它可以作为安装选项&[&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都是OsStrs,但我是Rust的新手,所以我猜这是错的.



1> Shepmaster..:

用途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.这将允许您传递更多类型而无需考虑它.您可能需要考虑询问维护者或向库提交补丁以使其更通用.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有