当前位置:   article > 正文

rust clone 的一个小注意点

rust clone 'static

先看代码A:

  1. #[derive(Debug, Clone)]
  2. struct Test(i32);
  3. fn main() {
  4. let mut x = Test(1);
  5. let a = &x;
  6. let b = a.clone();
  7. let c: i32 = b;
  8. }

这段代码报的错是:

  1. |
  2. 8 | let c: i32 = b;
  3. | ^ expected i32, found struct `Test`
  4. |
  5. = note: expected type `i32`
  6. found type `Test`

再看代码B:

  1. #[derive(Debug)]
  2. struct Test(i32);
  3. fn main() {
  4. let mut x = Test(1);
  5. let a = &x;
  6. let b = a.clone();
  7. let c: i32 = b;
  8. }

报错是:

  1. |
  2. 8 | let c: i32 = b;
  3. | ^ expected i32, found &Test
  4. |
  5. = note: expected type `i32`
  6. found type `&Test`

两段代码的唯一区别就是结构体Test,A实现Clone,B没有实现Clone。

结论就是:如果一个引用,它引用的对象如果不能clone,就clone引用,如果能clone,就直接clone对象并返回。

转载于:https://my.oschina.net/u/855913/blog/3072629

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/514552
推荐阅读
相关标签
  

闽ICP备14008679号