进阶
这一部分介绍语言的进阶面:包括 @Test 测试与断言、虚拟时钟、生成器、运行期反射等等。
测试与断言(Test)@Test 标注公开无参函数即为测试函数,mush test 逐条运行并给出摘要。断言族在 std::Test 模块里,失败走 fail 流。
虚拟时钟(Clock)Clock 是宿主注入的 extern 模块,提供虚拟时钟读面,脚本拿到的是确定性的、可测试的时间。
生成器(Generator)generator 是面向工具链的元编程声明:生成器模块在编译期被调用,按规则向目标类型注入成员。它是给「自动生成样板」的场合准备的,日常业务代码用不到。
反射(Reflection)反射在运行期获取以下信息:这个值是什么类型、它有哪些成员、成员上贴了哪些特性。入口是 std::Reflect 模块 typeof(T) 语法,产出五个不可构造的句柄类型:Type、Field、Prop、Attr、Method。
预处理指令(Preprocess)# 在行首触发预处理指令:编译前按符号条件裁剪源码。适合「同一份代码,编辑器构建多一套调试函数」这类分叉。
查询(Query)query 是遍历 ECS 实体的循环语句:按组件类型筛选实体,把组件字段以变量视图绑定进循环体,读写直达宿主存储。组件的声明见组件。
组件(Component)component 声明 ECS 组件:一份纯数据(POD)的存储单元,只有字段、没有行为,由 query 按类型筛选实体并读写。
资源作用域(Using)using 将资源的生命周期限定在块作用域内:进入时拿着资源,离开块时自动调用 Dispose。文件句柄、数据库连接、事务这类文件句柄、数据库连接这类需要显式释放的资源都适用。
Jsonstd 的 Json 模块做 JSON 与语言值的双向转换:强类型的 Parse / Write,动态的 ParseAny,以及序列化 Stringify。
标准库(Std)标准库是名为 std 的内建包。
宿主边界(Host)MushScript 脚本版运行在宿主环境里(CLI、游戏引擎、编辑器各自都是宿主)。宿主通过 extern 面向脚本注入能力:模块、函数、全局变量三类注入物各有各的规矩,脚本侧只消费、不声明。与注入面配套的还有 opaque 不透明句柄类型,值同样只能来自宿主。
最后更新于 2026年10月11日
