rust - Rust 将指向对象的指针传递给类函数
问题描述
我在创建一个包含对象向量的对象时遇到问题:
pub struct ParticleSystem {
particles: Vec<Particle>
}
impl ParticleSystem {
pub fn new() -> ParticleSystem {
ParticleSystem {
particles: Vec::new()
}
}
}
我需要能够在不传递所有权的情况下从 Particle 类的函数中访问此对象中的向量。
let mut system = ParticleSystem::new();
我将如何将指向 this 的指针传递给函数?我对生锈很陌生。感谢您的帮助,当我尝试过时,它只是传递了所有权并干扰了程序的其他方面。
解决方案
如果您需要在 中相互比较,Particle
可以将对其他s 的引用作为参数传递:Particle
ParticleSystem
Particle
impl Particle {
pub fn has_collision(&self, others: &[Particle]) -> bool {
for other in others {
if other.dist(self) < threshold {
return true;
}
}
false
}
}
这比每个Particle
都有自己对整个系统的引用要简单得多,因为借用只持续到对函数的调用。如果Particle
有一个字段是对整个系统的引用,那么这将变得更加复杂,因为 Rust 需要确保每个字段Particle
都不能超过整个系统——这将需要大量工作并且可能需要运行时开销;例如,当您破坏系统时,您需要确保Particle
在删除之前ParticleSystem
删除每个。
此外,这种方式更节省内存,因为Particle
结构不需要包含指向系统的指针。
推荐阅读
- makefile - 处理从单个输入生成的多个文件
- c++ - 命名空间参数的理想架构设计
- angular - 将角度路由的路径提取到单独的文件中
- android - 如何阻止屏幕上的任何点击,直到对话框显示动画完成?
- swift - 如何使用 swift 处理 JSON 中丢失的对象?
- wordpress - Wordpress 维护模式功能
- android - 如何在没有嵌套滚动视图的情况下实现新材料 gmail 工具栏?
- javascript - jQuery:不支持的带有表单数据的媒体类型
- php - 使用 PHP 会话显示多个数据库行
- pandas - python pandas数据框中的列可以是列表或集合还是......?