首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么slice可以直接调用into_iter而不中止呢?

为什么slice可以直接调用into_iter而不中止呢?
EN

Stack Overflow用户
提问于 2021-10-22 05:07:42
回答 1查看 89关注 0票数 3

我是一个生锈新手,我测试了下面的代码并得到了一个问题。是slice [T]类型吗?如果是的话,[T]是不大小的,但是在我编译代码时它会通过。为什么会这样呢?

代码语言:javascript
复制
#[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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69671678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档