移动/游戏
编写或审查 Roblox Luau 核心语法时:避免真值…
适用于纯 Luau 语法和语义问题,包括真值、表、迭代、函数、作用域、运算符、字符串模式,以及从 JavaScript 或 Python 移植代码。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
编写或审查 Roblox Luau 核心特定
解决思路
- 判断真值时,只把 `false` 和 `nil` 视为假;`0`、空字符串 `""`、`{}` 都视为真。
- 比较值时不做类型强制;`0 == "0"` 为 `false`;不等运算符使用 `~=`。
- 使用 1-based 数组约定;仅对没有 `nil` 空洞的序列使用 `#array`。
- 给表键赋 `nil` 时视为删除该键;把表赋给变量时复制引用;使用 `table.clone` 时注意是浅拷贝。
- 不要依赖字典迭代顺序来定义行为,因为该顺序未指定。
- 访问动态键时使用方括号 `record[field]`;点语法只能使用字面标识符。
- 处理缺失参数时记住它们会变为 `nil`;多余返回值和参数可由上下文丢弃。
- 当 `a` 可能为 `false` 或 `nil` 时,优先使用 `if` 表达式而不是 `condition and a or b`。
- 局部名称从声明处向后作用域;相互递归函数需前向声明。
- 把 Luau 字符串模式当作独立语法,不要当作正则表达式;其语法和能力不同。
- 在选择反引号插值和 `..` 拼接时选更清晰的形式;在热循环中收集多个片段并一次性拼接。
- 测试 NaN 时不要依赖相等或 `<`/`>` 比较;使用 `x ~= x`。
- 处理二进制数据时使用 `buffer` 库:固定大小、0-based 偏移、显式宽度读写;避免使用 `buffer.readinteger`/`writeinteger`(仅存根,未发布运行时)。
- 处理 Base64、哈希或压缩时使用 `EncodingService`(操作 buffer 而非字符串;JSON 仍通过 `HttpService`);细节见完整参考。
- 从 JavaScript 移植时,不要使用 `===`、`!==`、`null`、可选链、展开、箭头函数、数组方法,它们不是 Luau 语法。
- 从 Python 移植时,不要直接翻译 `None`、0-based 列表假设、列表推导、异常、隐式元组行为。
- 使用 `x or fallback` 时,记住它测试真值性而非只判断缺失,会替换合法的 `false` 值。
- 区分 `typeof(value)` 与 `type(value)`:前者识别 Roblox 数据类型,后者报告底层 Luau 类型类别。
- 审查 Luau 代码时检查:合法 Luau、序列无 `nil` 空洞、不假设字典顺序、无意外别名、无跨语言语法、无隐藏 `false` 或 `nil` 的布尔表达式。
- 需要详细语言陷阱和翻译示例时,查阅 `references/full.md`。
适用边界 · 注意事项
- 不要用于 Luau 类型注解问题;应使用 `roblox-luau-types`。
- 不要用于所有权和生命周期问题;应使用 `roblox-luau-patterns`。
- 不要用于 Roblox API 领域问题;应使用对应领域技能。