Vector a&;[T] 论点也接受&;Vec<;T>;?

Vector a&;[T] 论点也接受&;Vec<;T>;?,vector,types,rust,Vector,Types,Rust,我正在翻阅铁锈书,即。在那里,我遇到了以下片段: 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 =

我正在翻阅铁锈书,即。在那里,我遇到了以下片段:

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)
}
fn main(){
让args:Vec=env::args().collect();
let(查询,文件名)=解析配置(&args);
//--剪断--
}
fn parse_config(参数:&[String])->(&str,&str){
let query=&args[1];
让filename=&args[2];
(查询,文件名)
}
让我困惑的是
args:&[String]
。如果我将其替换为
args:&Vec
,它也可以工作。我的猜测是,
&[String]
是一种更通用的类型注释,它不仅匹配
&Vec
,还匹配其他一些类型。对吗?如果是这样的话,还有哪些类型与
[T]
匹配?

一般来说


编译器允许
&[String]
而不是
&Vec
的原因是。可以说,前一种表示法(在函数参数中)更为通用;也是。有关自动取消引用规则的更多详细信息,请参见。

[T]
不是数组,因为数组是具有静态已知大小的
[T;N]
。名称
[T]
是一个连续的序列。。我不确定这是否是官方术语。相反,
[T]
是一个切片,
&[T]
是一个共享切片,通常称为切片。这让人困惑:)是的,它可能让人困惑;我想
[T]
&[T]
&mut[T]
都可以被称为切片,但参考变量最有用,因此这个名称最能体现在它们身上。