3

这就是我想要做的:将所有命令行参数作为(二进制)文件打开并从中读取字节。这里不断变化的语法不利于谷歌搜索,但这是我迄今为止发现的:

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 中不同指针类型的理解实际上是不存在的。我可以在这里做什么?

4

1 回答 1

4

尝试&Path::new(file_name.as_slice())

不幸的是,由于需要 trait 参数Path::new(),如果你传递它 a~str或者~[u8]它将尝试直接使用该类型。这就是你传递的东西*file_name。除非您无法在 Rust 中移出指针取消引用,这就是您收到错误的原因。

通过使用file_name.as_slice()instead (在这种情况下,它等同于 to (*file_name).as_slice(),但 Rust 会为你解引用),它将转换~str为 a &str,然后可以Path::new()毫无问题地传递给 a 。

于 2014-01-10T18:10:18.817 回答