我是一个生锈新手,我测试了下面的代码并得到了一个问题。是slice [T]类型吗?如果是的话,[T]是不大小的,但是在我编译代码时它会通过。为什么会这样呢?
#[test]
fn test_scilce(){
let v = vec!['a', 'b', 'v'];
let slice = (v[1..3]).into_iter();
// let s: String = slice.collect();
println!("{:?}", slice);
println!("{:?}", v);
}发布于 2021-10-22 05:24:07
由于[T]::into_iter(self)不存在,但[T]::into_iter(&self)存在,所以编译器插入缺失的引用,并将(v[1..3]).into_iter()视为(&v[1..3]).into_iter()。这与(&v[1..3]).iter()相同,并给出了向量元素的引用。(甚至有一个克里皮皮棉警告您在片或其他引用上使用into_iter()。)
同样的自动引用机制允许您编写v.len()而不是“正确”的(&v).len(),尽管Vec::len采用了&self。
https://stackoverflow.com/questions/69671678
复制相似问题