mcpField
L
luau-core

luau-core

github.com/flatbedj开发059 次安装今天更新
代码仓库

关于 luau-core

面向处理纯 Luau 语言任务的技能,帮助编写和修正语法、控制流、表及标准库用法。它明确排除类型系统、性能调优和 Roblox 引擎相关工作,并提供范围判断规则。

主要功能

  1. 01Luau 语法与语义指导
  2. 02控制流、作用域与函数结构
  3. 03表、标准库和元表用法
  4. 04Lua 与 Luau 兼容性判断

适用场景

  1. 01修正纯 Luau 代码语法
  2. 02选择表结构与迭代方式
  3. 03判断 Lua 习惯用法是否受支持

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/flatbedj/roblox-skills --skill luau-core

安装后在 Claude Code 中输入/luau-core确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
compatibility-notes.md
functions-tables-operators-scope-and-control-structures.md
getting-started-and-syntax.md
library-and-grammar-reference.md
metatables-and-userdata-concepts.md

详细介绍

luau-core

适用场景

当任务主要涉及纯 Luau 语言行为时,使用此技能:

  • 编写或修复纯 Luau 语法。
  • 选择符合惯用写法的控制流、变量作用域或函数结构。
  • 将表用作数组、字典或类对象值。
  • 正确使用标准库。
  • 使用元表实现索引、运算符、迭代或类对象模式。
  • 检查某个 Lua 特性或惯用写法是否与 Luau 兼容。

当任务主要涉及以下内容时,不要使用此技能:

  • Luau 类型注解、泛型、类型推断、类型细化或严格性策略。
  • 性能分析、优化策略或性能权衡。
  • Roblox 引擎 API、服务、事件、类、网络、数据或游戏玩法架构。

决策规则

  • 如果答案可以局限于纯 Luau 语法、语义、惯用写法和标准库用法,请使用此技能。
  • 如果任务核心涉及类型别名、注解、泛型、导出类型或分析器行为,请转交给 luau-types。
  • 如果任务核心涉及内存分配模式、热点循环、基准测试、性能分析或优化策略,请转交给 luau-performance。
  • 如果任务依赖 game、Instance、服务、远程调用、数据存储、UI、物理或其他 Roblox 运行时概念,请改用相应的 roblox/* 技能。
  • 如果请求混合了核心语言工作与范围外主题,只回答纯 Luau 部分,并明确排除其余内容。
  • 如果不确定,优先采用范围较窄的解读,并省略可能与其他技能重叠的内容。

指令

  1. 将 Luau 视为 Lua 5.1 加上选定的 Luau 扩展。除非 Luau 明确支持,否则不要假设它支持 Lua 5.2 及更高版本的特性。
  2. 默认优先使用 local 变量和 local function 声明。只有任务需要更大作用域时才使用全局变量。
  3. 保持控制流直接明了。优先使用常规的 if、elseif、else、循环、break 和 continue,而不是巧妙的布尔技巧。
  4. 使用 Luau 特有语法以提升正确性或可读性:
    • 使用 if ... then ... else ... 表达式,而不是用 a and b or c 模拟三元表达式。
    • 当左侧只应求值一次时,使用 += 等复合赋值。
    • 直接迭代表时,若 for k, v in table do 是最清晰的写法,则使用这种广义迭代方式。
  5. 有意地设计表的用途:
    • 将数组用于有序的数字序列。
    • 将字典用于键值查找。
    • 只有在自定义行为能显著改善 API 时,才使用基于元表的记录。
  6. 对概念上会传入 self 的方法,使用 : 定义和调用;对普通函数访问,使用 .。
  7. 如果标准库已有清晰表达某项操作的函数,优先使用内置库函数,而不是手写辅助函数。
  8. 谨慎且明确地使用元表。只定义抽象所需的元方法,避免令人意外的行为。
  9. 讨论兼容性时,及早指出不受支持的假设,例如 goto、位运算符、仅限整数的推理或完整 Lua 标准库的可用性。
  10. 所有示例都应与宿主环境无关,并且只使用纯 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