查看: 8|回复: 1

[脚本发布] [Lua]变量命名有什么规范?

[复制链接]

13

主题

26

回帖

566

积分

高级会员

积分
566
QQ
发表于 3 天前 | 显示全部楼层 |阅读模式
Lua 语言本身对变量命名没有强制的语法规范(除了不能以数字开头、不能使用保留字),但在实际工程和社区中,已经形成了一套广泛认可的约定俗成的规范。遵循这些规范能显著提升代码的可读性和可维护性。
以下是 Lua 社区主流的变量命名规范总结:
1. 基本规则(语法层面)
  • ✅ 只能包含 字母、数字、下划线 _
  • 不能以数字开头(如 3dModel 非法)
  • 不能使用 Lua 保留字(如 and, break, do, else, elseif, end, false, for, function, goto, if, in, local, nil, not, or, repeat, return, then, true, until, while)
  • ⚠️ 避免以下划线开头后接大写字母(如 _VERSION),这类命名被 Lua 内部保留用于全局特殊变量
2. 风格约定(社区惯例)
变量类型
命名风格
示例
说明

局部变量 / 函数参数
snake_case
player_name, max_hp
Lua 最主流的风格,与标准库一致

模块级私有变量
_snake_case
_cache, _internal_state
前缀下划线表示"内部使用,勿外部访问"

常量
UPPER_SNAKE_CASE
MAX_RETRY_COUNT, DEFAULT_TIMEOUT
全大写+下划线,表示不应修改的值

类/模块名
PascalCase
PlayerController, HttpUtils
用于面向对象风格的类或模块表

布尔变量
is_/has_/can_ 前缀
is_alive, has_permission
让条件判断读起来像自然语言

循环变量
单字母
i, j, k, n
仅用于短作用域的迭代器
3. 重要注意事项🔑 始终优先使用 local-- ❌ 错误:意外创建全局变量,污染全局环境且性能差count = 0-- ✅ 正确:显式声明局部变量local count = 0
原因:Lua 的全局变量存储在 _ENV 表中,每次访问都是表查找;而 local 变量直接通过寄存器访问,性能差距可达数倍。这也是为什么几乎所有 Lua 风格指南都把"避免全局变量"作为第一条规则。
🛡️ 防止拼写错误导致隐式全局变量推荐使用 Luacheck 等静态分析工具,它能检测出未声明的变量赋值(通常是拼写错误):
luacheck your_script.lua# 警告: assigning to undeclared global 'conut' (did you mean 'count'?)📦 模块导出命名local M = {}           -- 模块表用大写 M 是常见惯例M.player_count = 0     -- 公开 API 用 snake_caselocal _secret = "xxx"  -- 私有成员用下划线前缀return M4. 知名项目的风格参考
  • OpenResty / Kong:严格 snake_case + local,常量 UPPER_CASE
  • LÖVE (游戏框架):API 用 camelCase(历史原因),但用户代码推荐 snake_case
  • Roblox Luau:官方风格指南推荐 camelCase 用于变量,PascalCase 用于类——这是少数例外,因为 Roblox 生态偏向 TypeScript/C# 风格

38

主题

60

回帖

1207

积分

金牌会员

积分
1207
发表于 3 天前 | 显示全部楼层
这个应该发个投票,这样还能刷一轮投票
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表