【发布时间】:2021-08-16 01:00:12
【问题描述】:
我正在用 Rust 从头开始构建一个图形引擎。
我有一个结构点:
struct Point {
x: i32,
y: i32
}
还有一个三角形结构,就是三个点:
struct Triangle (Point,Point,Point)
.
我制作了一个特征引擎,稍后我将使用 SDL 实现它
trait Engine {
fn draw_triangle(&self,tri:Triangle){
self.draw_line(tri.0,tri.1);
self.draw_line(tri.1,tri.2); // <-
self.draw_line(tri.2,tri.0);
}
fn draw_line(&self,p1:Point,p2:Point)
}
我得到一个带有箭头的错误:使用移动的值 tri.1,移动后使用的值。
我知道这与引用和所有权有关,并且尝试过改变事物,但我只是不知道自己在做什么。
我找了又找,但无济于事:我无法理解。
谁能告诉我为什么这不起作用?不仅仅是一个解决方案,我希望了解
【问题讨论】:
-
欢迎来到 StackOverflow!你读过关于 Rust 的书吗,比如官方的书,或者 O'Reilly 的《Programming Rust》?两者都很好地解释了 moving 的概念,足以让您理解解决方案(如您所愿)。解决办法是在
struct Point的定义上面加上#[derive(Copy, Clone)]。它将使Point的行为更像一个非常简单的原始对象(如数字或布尔值),允许通过复制而不是移动将其传递给函数。
标签: struct rust reference ownership