< 返回版块

eweca-d 发表于 2021-05-12 16:48

最近得闲的时候在玩bevy这个游戏引擎,然后想到了几个问题。

第一就是bevy需要导入use bevy::prelude::*;,假如我的游戏代码里有main.rsresources.rslogic.rs,这三个都需要bevy里的某些内容时,每个rs文件头上都要use bevy::prelude::*;然后再按照各自的独特需求导入比如use bevy::render::pass::ClearColor;是吗?

第二个问题就是pub的问题,在模块化时,我想要把资源类的结构体和全局变量都放入一个resources.rs中,这些东西基本会被所有的模块给引用到,但是比如有某个大的结构体:

pub struct A {
    pub A1: i32,
    pub A2: i32,
    pub A3: i32,
}

就需要把每一个变量都添加pub,否则其他地方无法直接引用和修改结构体内某个单独的变量的值(这时候使用associated function只会更麻烦)。有没有办法声明结构体pub的同时,让它的所有变量都自动成为pub呢?还是说干写pub就完事了?

评论区

写评论
作者 eweca-d 2021-05-13 16:24

感谢~之后我看看

--
👇
madolchepalooza: 我记得社区里有人写过这种过程宏,可以自动把每个字段变成pub的,可以搜索一下

作者 eweca-d 2021-05-13 16:24

我是VS CODE + RUST插件 + TABNINE,倒是没有自动use。不过看起来解决方法就是自动use完事了。

--
👇
oloshe: 第一:我一般都是直接写,让ide自动use 😂 第二:Rust很重视安全,可能是为了安全才这样设计的吧

madolchepalooza 2021-05-13 10:57

我记得社区里有人写过这种过程宏,可以自动把每个字段变成pub的,可以搜索一下

oloshe 2021-05-12 23:11

第一:我一般都是直接写,让ide自动use 😂 第二:Rust很重视安全,可能是为了安全才这样设计的吧

作者 eweca-d 2021-05-12 21:25

一般都要公开,这就是麻烦的地方。好吧,还是直接pub了,我看了下bevy的源代码,也是这样做的。

--
👇
ZIP97: 使用 pub 很简洁啊,三个字母都嫌麻烦。。。

编辑器如果用 snippet 的话能省事些。

你要是不公开这个 item,那就不必写 pub。

作者 eweca-d 2021-05-12 21:24

感谢回答!

--
👇
ywxt:

  1. 是的,每个文件都是一个单独的模块。

  2. 我记得论坛之前有人发过一个crate,用宏实现。

苦瓜小仔 2021-05-12 20:58

使用 pub 很简洁啊,三个字母都嫌麻烦。。。

编辑器如果用 snippet 的话能省事些。

你要是不公开这个 item,那就不必写 pub。

ywxt 2021-05-12 20:29
  1. 是的,每个文件都是一个单独的模块。

  2. 我记得论坛之前有人发过一个crate,用宏实现。

1 共 8 条评论, 1 页