gpt4 book ai didi

vector - 为什么 &[T] 参数也接受 &Vec

转载 作者:行者123 更新时间:2023-11-29 08:13:58 25 4
gpt4 key购买 nike

我正在阅读 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] .这叫做 Deref coercion .可以说前一种表示法(在函数参数中)更通用;它也是the preferred one .有关自动取消引用规则的更多详细信息,请参阅 this question .

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com