我该怎么办才能解决“使用移动值”错误?

姆考夫

我正在尝试计算Rust(项目Euler 7)中的第10001个素数,作为其一部分,我检查整数是否为素数的方法引用了一个向量:

fn main() {
    let mut count: u32 = 1;
    let mut num: u64 = 1;
    let mut primes: Vec<u64> = Vec::new();
    primes.push(2);

    while count < 10001 {
        num += 2;
        if vectorIsPrime(num, primes) {
            count += 1;
            primes.push(num);
        }
    }
}

fn vectorIsPrime(num: u64, p: Vec<u64>) -> bool {
    for i in p {
        if num > i && num % i != 0 {
            return false;
        }
    }

    true
}

当我尝试引用向量时,出现以下错误:

error[E0382]: use of moved value: `primes`
 --> src/main.rs:9:31
  |
9 |         if vectorIsPrime(num, primes) {
  |                               ^^^^^^ value moved here, in previous iteration of loop
  |
  = note: move occurs because `primes` has type `std::vec::Vec<u64>`, which does not implement the `Copy` trait

我有什么做的,primes为了能够在内部访问它vectorIsPrime的功能?

瓦登

使用函数的当前定义vectorIsPrime(),该函数指定它需要参数的所有权,因为您按值传递了该参数

当函数按值要求参数时,编译器将通过检查其是否实现trait来检查是否可以复制该值Copy

  • 如果是这样,则将值复制(带有memcpy)并提供给函数,您仍然可以继续使用原始值。
  • 如果不是,则将该值移至给定函数,并且调用方之后无法使用它

这就是您所收到的错误消息的含义。

但是,大多数函数不需要参数的所有权:它们可以在“借用的引用”上工作,这意味着它们实际上并不拥有该值(例如,不能将其放入容器中或销毁它)。

fn main() {
    let mut count: u32 = 1;
    let mut num: u64 = 1;
    let mut primes: Vec<u64> = Vec::new();
    primes.push(2);

    while count < 10001 {
        num += 2;
        if vector_is_prime(num, &primes) {
            count += 1;
            primes.push(num);
        }
    }
}

fn vector_is_prime(num: u64, p: &[u64]) -> bool {
    for &i in p {
        if num > i && num % i != 0 {
            return false;
        }
    }
    true
}

vector_is_prime()现在,该函数指定仅需要一个切片,即,您可以使用借位运算符从向量中获取数组的借入指针(包括其大小)&

有关所有权的更多信息,请您阅读本书中有关所有权的部分

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Matlab解决中的严重错误-我该怎么办?

来自分类Dev

我该怎么办呢?该怎么办?

来自分类Dev

npm错误:cb()从未调用,我该怎么办?

来自分类Dev

错误在php中批量插入!我该怎么办?

来自分类Dev

我的ajax调用总是返回错误,该怎么办

来自分类Dev

使用xpath抓取时,我该怎么办?

来自分类Dev

要使用FDE +好的键盘,我该怎么办?

来自分类Dev

使用ping时收到DUP。我该怎么办?

来自分类Dev

路径错误,该怎么办?

来自分类Dev

Raspberry Pi我该怎么办?

来自分类Dev

意外升级,我该怎么办?

来自分类Dev

我该怎么办?教义关系

来自分类Dev

日期计数,我该怎么办?

来自分类Dev

不幸的是,该应用已停止。我该怎么做才能解决此问题?

来自分类Dev

我该怎么办才能通过进入for循环的ajax发出正确的对象

来自分类Dev

我该怎么办才能保护台式计算机上的数据免遭被盗的风险?

来自分类Dev

我该怎么办才能检索出屏幕外的窗口?

来自分类Dev

当我添加 3rd 方依赖项时,我无法解决 android studio 中的错误,我该怎么做才能解决这个问题?

来自分类Dev

PHP 登录表单不起作用,我该怎么做才能解决它?

来自分类Dev

解析错误:语法错误,意外的T_IF,期待')'我该怎么办?

来自分类Dev

我有此错误,我不知道该怎么办

来自分类Dev

我的变量不断收到语法错误。我该怎么办

来自分类Dev

我总是在迁移时出错,我该怎么办这种错误

来自分类Dev

我在编辑控制器中输入错误类型,我该怎么办?

来自分类Dev

当我在Parse Swift 2.2中收到未经授权的错误时该怎么办

来自分类Dev

如果启动板显示错误的上游连接,我该怎么办?

来自分类Dev

[固件错误]:由于勘误表,TSC_DEADLINE被禁用-我该怎么办?

来自分类Dev

为什么在这里会出现NA / NaN错误,我该怎么办?

来自分类Dev

[固件错误]:由于勘误表,TSC_DEADLINE被禁用-我该怎么办?

Related 相关文章

  1. 1

    Matlab解决中的严重错误-我该怎么办?

  2. 2

    我该怎么办呢?该怎么办?

  3. 3

    npm错误:cb()从未调用,我该怎么办?

  4. 4

    错误在php中批量插入!我该怎么办?

  5. 5

    我的ajax调用总是返回错误,该怎么办

  6. 6

    使用xpath抓取时,我该怎么办?

  7. 7

    要使用FDE +好的键盘,我该怎么办?

  8. 8

    使用ping时收到DUP。我该怎么办?

  9. 9

    路径错误,该怎么办?

  10. 10

    Raspberry Pi我该怎么办?

  11. 11

    意外升级,我该怎么办?

  12. 12

    我该怎么办?教义关系

  13. 13

    日期计数,我该怎么办?

  14. 14

    不幸的是,该应用已停止。我该怎么做才能解决此问题?

  15. 15

    我该怎么办才能通过进入for循环的ajax发出正确的对象

  16. 16

    我该怎么办才能保护台式计算机上的数据免遭被盗的风险?

  17. 17

    我该怎么办才能检索出屏幕外的窗口?

  18. 18

    当我添加 3rd 方依赖项时,我无法解决 android studio 中的错误,我该怎么做才能解决这个问题?

  19. 19

    PHP 登录表单不起作用,我该怎么做才能解决它?

  20. 20

    解析错误:语法错误,意外的T_IF,期待')'我该怎么办?

  21. 21

    我有此错误,我不知道该怎么办

  22. 22

    我的变量不断收到语法错误。我该怎么办

  23. 23

    我总是在迁移时出错,我该怎么办这种错误

  24. 24

    我在编辑控制器中输入错误类型,我该怎么办?

  25. 25

    当我在Parse Swift 2.2中收到未经授权的错误时该怎么办

  26. 26

    如果启动板显示错误的上游连接,我该怎么办?

  27. 27

    [固件错误]:由于勘误表,TSC_DEADLINE被禁用-我该怎么办?

  28. 28

    为什么在这里会出现NA / NaN错误,我该怎么办?

  29. 29

    [固件错误]:由于勘误表,TSC_DEADLINE被禁用-我该怎么办?

热门标签

归档