为什么当分配移动值的成员时编译不会失败?

2024-03-07

我正在研究以下示例Rust 实例 http://rustbyexample.com/.

#[derive(Debug)]
struct Point {
    x: f64,
    y: f64,
}

#[derive(Debug)]
struct Rectangle {
    p1: Point,
    p2: Point,
}

fn main() {
    let mut point: Point = Point { x: 0.3, y: 0.4 };
    println!("point coordinates: ({}, {})", point.x, point.y);

    let rectangle = Rectangle {
        p1: Point { x: 1.0, y: 1.0 },
        p2: point,
    };

    point.x = 0.5; // Why does the compiler not break here,
    println!(" x is {}", point.x); // but it breaks here?

    println!("rectangle is {:?} ", rectangle);
}

我收到此错误(Rust 1.25.0):

error[E0382]: use of moved value: `point.x`
  --> src/main.rs:23:26
   |
19 |         p2: point,
   |             ----- value moved here
...
23 |     println!(" x is {}", point.x);
   |                          ^^^^^^^ value used here after move
   |
   = note: move occurs because `point` has type `Point`, which does not implement the `Copy` trait

我明白我给了point to the Rectangle对象,这就是为什么我无法再访问它,但是为什么编译失败println!而不是上一行的作业?


到底发生了什么

fn main() {
    let mut point: Point = Point { x: 0.3, y: 0.4 };
    println!("point coordinates: ({}, {})", point.x, point.y);

    drop(point);

    {
        let mut point: Point;
        point.x = 0.5;
    }

    println!(" x is {}", point.x);
}

事实证明它已经被称为问题#21232 https://github.com/rust-lang/rust/issues/21232.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当分配移动值的成员时编译不会失败? 的相关文章

随机推荐

  • 使用 R 创建数字和字母的顺序列表

    这个问题涉及到这个先前提出的关于创建字母顺序列表的问题 https stackoverflow com questions 1439513 creating a sequential list of letters with r 我目前正在
  • 查找与亚什·乔普拉合作制作的电影数量超过任何其他导演的所有演员

    Scehma https i stack imgur com 5mr4u jpg SELECT p1 pid p1 NAME Count movie mid AS movieswithyc FROM person AS p1 natural
  • JPA 2 上的列表与设置 - 优点/缺点/便利性

    我尝试在 Stack Overflow 和其他网站上搜索使用的优点 缺点和便利性Sets vs Lists但我真的找不到何时使用这个或那个的明确答案 从 Hibernate 的文档中 他们指出非重复记录应该进入Sets并且 从那里开始 您应
  • 需要帮助使 jQuery .find 不区分大小写

    尝试使这个使用 find 的 jQuery 过滤器不区分大小写 例如 当搜索 cat 无引号 时 它将找到 cat 但找不到 Cat 或 CAT 同样 Cat 会找到 Cat 但找不到 cat 我怀疑这是非常基本的东西 但无法弄清楚 所以我
  • LESS @import:将路径传递给 lessc

    我想在父主题和子主题中使用 LESS 样式表 其中大部分样式表信息由父主题指定 子主题只需覆盖一些文件 这可以通过 LESS 的 Ruby 版本实现 如下所示 var parser new less Parser paths lib Spe
  • WCF多个服务同一配置中的同一合同

    我试图托管同一合约的不同服务实现 原因是需要一个虚拟实现来进行外部测试 我正在尝试将两者托管在同一个 Windows 服务中 private ServiceHost host private ServiceHost dummy protec
  • 在 hibernate 中更新对象的字段

    我有一个object A映射到table A in DB class A Integer id String field2 field2 field3 fieldN lots of other attribute 现在我想编写一个只更新单个
  • 禁用 Java 警告外观并影响 Java Web Start 应用程序

    Recently security vulnerabilities were discovered in the Java Plug In1 As a protection for the end user Java in most bro
  • Visual Studio/NuGet 缺少引用

    我的解决方案的引用出现了一些问题 因为有人搞乱了 NuGet 从源代码控制恢复导致项目无法加载 我不得不尝试一下才能最终加载内容 当我终于能够正确加载我的项目时 在一阵头痛之后 我有一个相当大的实验混乱需要清理 现在什么也没有构建 Nuge
  • Maven测试依赖的依赖关系

    我有一个父项目 它与范围有依赖关系test
  • 测试时如何设置React组件的宽度?

    I m trying to test a slider component 该滑块组件的宽度可以是可变的 当您单击滑块的 轨道 时 它应该更改值并触发onChange打回来 该值基于您在轨道上单击的位置 如果在最小值为时单击中间点100最大
  • 如何使用 3d perlin 噪声函数生成地形?

    我可以使用 2D Perlin 噪声函数来生成高度值 但我不明白为什么要使用 3D Perlin 噪声函数 在诺奇的博客 http notch tumblr com post 3746989361 terrain generation pa
  • javaFX 中的抖动阶段

    是否可以使用时间轴来摇动初级阶段 从而使用 XTimeline 和 YTimeLine final Timeline Xtimeline new Timeline for Animate On X Stage Xtimeline setCy
  • AFrame:重新调整元素的父级,保持其世界位置、旋转

    我正在尝试重新设置元素 实体 的父级 保持其在场景中的位置 旋转 以及如果可能的话 大小 例如比例 理想情况下 我希望有一个组件 例如 reparent 当在实体上设置时 将其 移动 到指定的父级 从而将实体的外观保留在场景中 例如 对于下
  • 如何在 MATLAB 中创建循环缓冲区,以便以正确的顺序进行连续测量

    我读到 如何在 MATLAB 中创建缓冲矩阵以进行连续测量 http stackoverflow com questions 821637 how to create a buffer matrix in matlab for contin
  • 更改 Rails 版本

    我不小心将 Rails 版本更改为 4 0 0 我尝试过 gem uninstall Rails version 4 0 0 rc1 并安装版本 3 2 13 但当rails v 时它仍然是版本 4 0 0 然后我尝试了 gem unins
  • Java电子邮件内容为空

    我有一些代码片段 我可以在其中发送带有 Excel 文件附件的电子邮件 一切正常 我可以看到标题 甚至文件附件 唯一没有出现的是电子邮件内容 我已经测试过我的 emailContent 变量不为空 我还能做些什么来让它出现 我什至启用了这行
  • 使用 AJAX 和 PHP 上传多个文件

    我正在尝试使用 ajax 和 php 上传多个文件 JavaScript和Ajax代码如下 document on click UploadButton function e var form new FormData var files
  • 带有可选index.php的动态RewriteBase

    我的动态基本 URL 位于 us ca and fr ca 如上所述使用建议的 RewriteCondhere https stackoverflow com a 25626489 1812580 在大多数情况下我都能做到这一点 它起作用的
  • 为什么当分配移动值的成员时编译不会失败?

    我正在研究以下示例Rust 实例 http rustbyexample com derive Debug struct Point x f64 y f64 derive Debug struct Rectangle p1 Point p2