关于 luau-core
面向处理纯 Luau 语言任务的技能,帮助编写和修正语法、控制流、表及标准库用法。它明确排除类型系统、性能调优和 Roblox 引擎相关工作,并提供范围判断规则。
主要功能
- 01Luau 语法与语义指导
- 02控制流、作用域与函数结构
- 03表、标准库和元表用法
- 04Lua 与 Luau 兼容性判断
适用场景
- 01修正纯 Luau 代码语法
- 02选择表结构与迭代方式
- 03判断 Lua 习惯用法是否受支持
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ flatbedj/ roblox-skills --skill luau-core安装后在 Claude Code 中输入/luau-core确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/compatibility-notes.mdfunctions-tables-operators-scope-and-control-structures.mdgetting-started-and-syntax.mdlibrary-and-grammar-reference.mdmetatables-and-userdata-concepts.md详细介绍
luau-core
适用场景
当任务主要涉及纯 Luau 语言行为时,使用此技能:
- 编写或修复纯 Luau 语法。
- 选择符合惯用写法的控制流、变量作用域或函数结构。
- 将表用作数组、字典或类对象值。
- 正确使用标准库。
- 使用元表实现索引、运算符、迭代或类对象模式。
- 检查某个 Lua 特性或惯用写法是否与 Luau 兼容。
当任务主要涉及以下内容时,不要使用此技能:
- Luau 类型注解、泛型、类型推断、类型细化或严格性策略。
- 性能分析、优化策略或性能权衡。
- Roblox 引擎 API、服务、事件、类、网络、数据或游戏玩法架构。
决策规则
- 如果答案可以局限于纯 Luau 语法、语义、惯用写法和标准库用法,请使用此技能。
- 如果任务核心涉及类型别名、注解、泛型、导出类型或分析器行为,请转交给
luau-types。 - 如果任务核心涉及内存分配模式、热点循环、基准测试、性能分析或优化策略,请转交给
luau-performance。 - 如果任务依赖
game、Instance、服务、远程调用、数据存储、UI、物理或其他 Roblox 运行时概念,请改用相应的roblox/*技能。 - 如果请求混合了核心语言工作与范围外主题,只回答纯 Luau 部分,并明确排除其余内容。
- 如果不确定,优先采用范围较窄的解读,并省略可能与其他技能重叠的内容。
指令
- 将 Luau 视为 Lua 5.1 加上选定的 Luau 扩展。除非 Luau 明确支持,否则不要假设它支持 Lua 5.2 及更高版本的特性。
- 默认优先使用
local变量和local function声明。只有任务需要更大作用域时才使用全局变量。 - 保持控制流直接明了。优先使用常规的
if、elseif、else、循环、break和continue,而不是巧妙的布尔技巧。 - 使用 Luau 特有语法以提升正确性或可读性:
- 使用
if ... then ... else ...表达式,而不是用a and b or c模拟三元表达式。 - 当左侧只应求值一次时,使用
+=等复合赋值。 - 直接迭代表时,若
for k, v in table do是最清晰的写法,则使用这种广义迭代方式。
- 使用
- 有意地设计表的用途:
- 将数组用于有序的数字序列。
- 将字典用于键值查找。
- 只有在自定义行为能显著改善 API 时,才使用基于元表的记录。
- 对概念上会传入
self的方法,使用:定义和调用;对普通函数访问,使用.。 - 如果标准库已有清晰表达某项操作的函数,优先使用内置库函数,而不是手写辅助函数。
- 谨慎且明确地使用元表。只定义抽象所需的元方法,避免令人意外的行为。
- 讨论兼容性时,及早指出不受支持的假设,例如
goto、位运算符、仅限整数的推理或完整 Lua 标准库的可用性。 - 所有示例都应与宿主环境无关,并且只使用纯 Luau。不要依赖 Roblox 引擎对象或服务。
使用参考资料
- 打开
references/getting-started-and-syntax.md,了解语法形式、字面量、赋值、表达式形式以及 Luau 独有的语法扩展。 - 打开
references/functions-tables-operators-scope-and-control-structures.md,了解核心执行模型:函数、闭包、表、真值判断、迭代和控制流。 - 打开
references/metatables-and-userdata-concepts.md,了解元方法行为、类似对象的表模式、原始操作以及 userdata 的边界。 - 打开
references/library-and-grammar-reference.md,了解标准库的选择,以及语句和表达式的简明语法提示。 - 当请求比较 Luau 与 Lua,或涉及特定版本的行为时,打开
references/compatibility-notes.md。 - 除非任务明确涉及其他技能的范围,否则不要打开或引用此技能之外的参考资料。
检查清单
- 解决方案符合有效的 Luau 语法。
- 明确指定作用域,并默认使用
local。 - 控制流清晰,并使用最简单且正确的结构。
- 有意选择表的用途:数组、字典或由元表支持的记录。
- 迭代方式符合数据形状。
- 正确使用标准库,且比自定义辅助函数更简单。
- 元表行为应尽量精简、可预测;若不明显,应在代码中说明。
- 不包含深入的类型系统内容。
- 不包含性能调优建议。
- 不包含 Roblox 引擎 API 或架构建议。
常见错误
- 将
0或""视为假值。在 Luau 中,只有false和nil是假值。 - 当
b可能为false或nil时,用a and b or c代替三元表达式。 - 误以为数组的索引从 0 开始,而不是从 1 开始。
- 混用方法和函数语法,例如使用
:定义,却使用.调用。 - 依赖字典的迭代顺序。
- 忘记缺失的函数参数会变成
nil,多余的参数会被忽略。 - 应使用局部变量或闭包时却使用全局变量。
- 对简单的数据容器过度使用元表。
- 误以为 Luau 支持较新 Lua 版本的特性,例如
goto、位运算符或整数语义。
示例
使用 if 表达式,而不是布尔三元表达式技巧
local function labelScore(score)
return if score >= 100 then "high" else "normal"
end
优先使用局部变量和直观的控制流
local function firstPositive(values)
for _, value in values do
if value > 0 then
return value
end
end
return nil
end
有意地使用表
local queue = {}
queue[#queue + 1] = "a"
queue[#queue + 1] = "b"
local first = table.remove(queue, 1)
对类似对象的表使用方法语法
local Counter = {}
Counter.__index = Counter
function Counter.new()
return setmetatable({ value = 0 }, Counter)
end
function Counter:increment()
self.value += 1
return self.value
end
仅在明确需要相应行为时添加元表
local Range = {}
Range.__index = Range
function Range.new(minimum, maximum)
return setmetatable({ minimum = minimum, maximum = maximum }, Range)
end
function Range:contains(value)
return value >= self.minimum and value <= self.maximum
end
function Range:__tostring()
return string.format("[%d, %d]", self.minimum, self.maximum)
end
评论
支持 Markdown