这就是我要做的事情:将所有命令行参数打开为(二进制)文件并从中读取字节。这里不断变化的语法不会影响谷歌搜索,但这是我到目前为止所发现的:
use std::io::{File, result};
use std::path::Path;
use std::os;
fn main() {
let args = os::args();
let mut iter = args.iter().skip(1); // skip the program name
for file_name in iter {
println(*file_name);
let path = &Path::new(*file_name);
let file = File::open(path);
}
}
问题在于:
test.rs:44:31: 44:41 error: cannot move out of dereference of & pointer
test.rs:44 let path = &Path::new(*file_name);
我在这里碰到了一堵砖墙,因为虽然我对C中的指针很好,但我对生锈中不同指针类型的理解几乎不存在。我能在这做什么?
答案 0 :(得分:4)
尝试&Path::new(file_name.as_slice())
不幸的是,由于Path::new()
所采用的特征论证,如果您将~str
或~[u8]
传递给它,它会尝试直接使用该类型。这就是你用*file_name
传递的内容。除非你不能在Rust中移出指针取消引用,这就是你得到错误的原因。
使用file_name.as_slice()
代替(在这种情况下,相当于(*file_name).as_slice()
,但Rust会为您执行解引用)它会将~str
转换为{{1}然后可以毫无问题地将其传递给&str
。