我正在学习 Rust 编程语言,特别是MiniGrep 项目。在这个项目中,我遇到了以下代码片段:
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]
不是一个数组,因为数组是具有静态已知大小的[T; N]
。slice documentation 将[T]
称为连续序列。我不确定这是否是官方术语。 - MB-F[T]
是一个 切片 ,&[T]
是一个 共享切片 ,通常被称为 切片 。这可能会令人感到困惑 :) - MB-F[T]
、&[T]
和&mut [T]
都可以被称为切片,但是引用变体最有用,因此这个名称最常用于它们。 - ljedrzself
可以隐式引入间接性T -> &T
,而对于普通参数则不会这样做。 - kmdreko