首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在锈蚀中读取向量项时的编译错误(E2077)

在锈蚀中读取向量项时的编译错误(E2077)
EN

Stack Overflow用户
提问于 2022-08-28 14:07:25
回答 1查看 31关注 0票数 0

为了练习使用铁锈,我试图生成斐波纳契序列的第n个术语,下面是我编写的函数,用于尝试实现以下功能:

代码语言:javascript
运行
复制
fn findTerm(term: i128) -> i128 {
    let mut fibonacci: Vec<i128> = Vec::new();
    fibonacci.push(1);
    fibonacci.push(1);

    while fibonacci.len() < term.try_into().unwrap() {
        fibonacci.push(fibonacci[fibonacci.len() - 1] + fibonacci[fibonacci.len() - 2]);
    }

    println!("{:?}", fibonacci);

    fibonacci[term - 1]
}
代码语言:javascript
运行
复制
error[E0277]: the type `[i128]` cannot be indexed by `i128`
  --> src/lib.rs:12:5
   |
12 |     fibonacci[term - 1]
   |     ^^^^^^^^^^^^^^^^^^^ slice indices are of type `usize` or ranges of `usize`
   |
   = help: the trait `SliceIndex<[i128]>` is not implemented for `i128`
   = help: the trait `SliceIndex<[T]>` is implemented for `usize`
   = note: required because of the requirements on the impl of `Index<i128>` for `Vec<i128>`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-28 14:19:37

向量只能由usize类型的整数索引,即指针的大小(索引向量大致相当于执行指针算法)。因此,您需要:

代码语言:javascript
运行
复制
fn find_term(term: i128) -> i128 {
    let mut fibonacci = Vec::new();
    fibonacci.push(1);
    fibonacci.push(1);

    while fibonacci.len() < term.try_into().unwrap() {
        fibonacci.push(fibonacci[fibonacci.len() - 1] + fibonacci[fibonacci.len() - 2]);
    }

    println!("{:?}", fibonacci);

    fibonacci[(term - 1) as usize]
}

游乐场

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

https://stackoverflow.com/questions/73519369

复制
相关文章

相似问题

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