gpt4 book ai didi

rust - 为什么 slice 可以直接调用 into_iter 而不会 abort?

转载 作者:行者123 更新时间:2023-12-04 13:05:30 25 4
gpt4 key购买 nike

我是 Rust 新手,我测试了以下代码并得到了一个问题。 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);
}

最佳答案

因为 [T]::into_iter(self) 不存在,但是 [T]::into_iter(&self) 存在,编译器插入缺失的引用并将 (v[1..3]).into_iter() 视为 (&v[1..3]).into_iter()。这又与 (&v[1..3]).iter() 相同,并给出对向量元素的引用。 (甚至有一个 clippy lint 警告您在 slice 或其他引用上使用 into_iter()。)

相同的自动引用机制允许您编写 v.len() 而不是“正确的”(&v).len(),尽管 Vec::len&self

关于rust - 为什么 slice 可以直接调用 into_iter 而不会 abort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69671678/

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