我正在阅读 Rust 书,即 minigrep project 。在那里我遇到了以下片段:

fn main() {
    let args: Vec<String> = env::args().collect();

    let (query, filename) = parse_config(&args);

    // --snip--
}

fn parse_config(args: &[String]) -> (&str, &str) {
    let query = &args[1];
    let filename = &args[2];

    (query, filename)
}

对我来说令人困惑的部分是 args: &[String] 。如果我用 args: &Vec<String> 替换它,它也可以工作。我的猜测是 &[String] 是一种更通用的类型注释,不仅匹配 &Vec<String> ,还匹配其他一些类型。那是对的吗?如果是这样,[T] 匹配哪些其他类型?

最佳答案

一般来说, [T] is a contiguous sequence and &[T] is a slice

编译器允许 &[String] 而不是 &Vec<String> 的原因是 Vec<T> dereferences to [T] 。可以说前者的记法(在函数参数中)更通用;它也是 the preferred one 。有关自动取消引用规则的更多详细信息,请参见 this question

关于vector - 为什么 &[T] 参数也接受 &Vec<T>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50228083/

10-11 22:57
查看更多