首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vec的“无法移出借来的内容”而不是u64

Vec的“无法移出借来的内容”而不是u64
EN

Stack Overflow用户
提问于 2017-03-27 03:39:52
回答 1查看 330关注 0票数 0

以下代码引发错误:

代码语言:javascript
复制
struct Foo {
    a: Vec<u64>,
}

impl Foo {
    fn change_a(&mut self, new_a: Vec<u64>) {
        self.a = *choose(&self.a, &new_a);
    }
}

fn choose<'a>(x: &'a Vec<u64>, y: &'a Vec<u64>) -> &'a Vec<u64> {
    return if x > y { x } else { y };
}

fn main() {
    let mut foo = Foo { a: vec![1] };
    foo.change_a(vec![3]);
    println!("{:?}", foo.a);
}

错误是:

代码语言:javascript
复制
error[E0507]: cannot move out of borrowed content
 --> src/main.rs:7:18
  |
7 |         self.a = *choose(&self.a, &new_a);
  |                  ^^^^^^^^^^^^^^^^^^^^^^^^ cannot move out of borrowed content

如果我将这段代码工作正常 s替换为Vec<u64>s,则为u64s。

有什么关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-27 04:05:57

原语类型u64实现Copy。这意味着u64具有“复制语义”:如果编译器发现我们试图获得T: Copy的所有权,但仍然使用移出的值,则T将被复制。

Vec不是Copy,但它是Clone,这意味着我们可以做到

代码语言:javascript
复制
self.a = choose(& self.a, & new_a).clone();

来解决这个问题。

这里是使用示例复制语义的另一个示例。

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

https://stackoverflow.com/questions/43037583

复制
相关文章

相似问题

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