几个问题。
第一个结果是
extension()
是一个
Option<T>
. 具体来说,它是
Option<&std::ffi::OsStr>
. 所以你必须打开它:
但这不是唯一的问题,因为打电话
to_str()
关于一个
&OsStr
将返回
Option<&str>
它本身也不是
String
.
排除了字符串类型之间转换可能被忽略的所有问题…这是对引起您问题的部分的最小再现:
use std::path::Path;
use std::ffi::OsStr;
fn main() {
let os_str = OsStr::new("example.txt");
let path = Path::new(os_str);
let extensioner = path.extension();
let my_new_string: String = extensioner.unwrap().to_str().unwrap().into();
println!("Extension: {}", my_new_string);
}
Here it is running on the playground
基本上,我们:
-
unwrap
这个
Option<&OsStr>
变成一个
&OSSTR
.
-
呼叫
ToSt-()
上
&OSSTR
-
拆开
结果
选项<&str>
变成一个
&str
-
呼叫
into()
将其转换为
弦
(这将调用
From
特性实现
弦
)