【发布时间】:2020-08-08 19:16:19
【问题描述】:
我对 Rust 很陌生,在这种情况下我无法弄清楚如何处理所有权(和生命周期?)。我对编程并不陌生,实际上我正在重新实现一些已经在 JS 中工作的东西 (https://sheraff.github.io/boids/)。
在这种情况下,Universe 基本上是一个包含许多Entity 的“模拟”环境。在每个universe.tick() 上,每个Entity 都需要知道它可以“看到”哪些其他Entity。为此,entity.update() 将 Entity 列表作为参数。
因此,我有一段脚本,我似乎无法找到一个好的所有权结构:
for mut entity in self.entities {
entity.update(&self.entities);
}
你会怎么做?
我可以告诉你我尝试了什么,但感觉就像我已经尝试了所有我能想到的东西,包括阅读 Rust 书,并且我已经收到了所有可能的错误消息......抱歉。
PS:当然,及时,它不是将在entity.update 中传递的整个实体列表,而是经过过滤的列表。
下面是代码结构的一般简化:
pub struct Entity {
pub point: Point,
vision: Cone,
angle: Angle
}
impl Entity {
pub fn update(&mut self, entities: &Vec<Entity>) {
// ...
}
}
pub struct Universe {
pub entities: Vec<Entity>
}
impl Universe {
pub fn new() -> Universe {
let mut entities: Vec<Entity> = vec![];
for _ in 1..200 {
let mut entity = Entity::new();
entities.push(entity);
}
Universe {
entities
}
}
pub fn tick(&self) {
for mut entity in self.entities {
entity.update(&self.entities);
}
}
}
【问题讨论】:
-
这可能有助于理解“锈所有权”youtu.be/TCUBSbJENO4
-
@nbari 谢谢你,确实不错。但它并没有借用(尽管他们的其他视频似乎这样做),这似乎对这篇文章中的问题至关重要。