这是我正在尝试做的事情:将所有命令行参数作为(二进制)文件打开并从中读取字节。这里不断变化的语法不利于谷歌搜索,但这是我到目前为止发现的:
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 中的指针很满意,但我对 Rust 中不同指针类型的理解实际上是不存在的。我可以在这里做什么?
最佳答案
尝试 &Path::new(file_name.as_slice())
不幸的是,由于特征参数 Path::new()
需要,如果你传递给它 ~str
或 ~[u8]
它会尝试直接使用该类型。这就是你传递给 *file_name
的东西.除了你不能在 Rust 中移出指针取消引用,这就是你得到错误的原因。
通过使用 file_name.as_slice()
相反(在这种情况下,相当于 (*file_name).as_slice()
,但 Rust 将为您取消引用)它将转换 ~str
到 &str
,然后可以传递给 Path::new()
没有问题。
关于Rust 0.9——读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049820/