【发布时间】:2020-09-25 05:52:07
【问题描述】:
我很困惑为什么函数 get 可以同时与 Vec<T> 和 &Vec<T> 一起使用。我知道&Vec<T> 会自动转换为&[T],所以从某种意义上说,问题是为什么它适用于Vec<T> 和&[T]。很明显,get 和&[T] 一起工作,那么除了&[T] 的实现之外,是不是单独为Vec<T> 实现了呢?看文档,好像不是,只有一个get实现:https://doc.rust-lang.org/std/vec/struct.Vec.html#method.get
在下面的代码中,get 作用于Vec<T>。
fn first<T: PartialOrd + Copy>(list: Vec<T>) -> T {
*list.get(0).unwrap()
}
fn main() {
let number_list = vec![34, 50, 25, 100, 65];
let result = first(number_list);
println!("The first number is {}", result);
}
在这段代码中,它作用于&Vec<T>(又名&[T]):
fn first<T: PartialOrd + Copy>(list: &Vec<T>) -> T {
*list.get(0).unwrap()
}
fn main() {
let number_list = vec![34, 50, 25, 100, 65];
let result = first(&number_list);
println!("The first number is {}", result);
}
【问题讨论】: