EmmyLua注释详解

Lua EmmyLua 注解详解

Why

为了使 IDE 编码体验和强语言相近

让 IDE 提前发现编码错误

BUG 查找更方便

代码阅读更方便

建议

明确字段类型

明确字段访问修饰符

明确方法参数类型

善用 ":" 继承 "|" 或 ","多个

支持格式

--类 ---@class MY_TYPE:PARENT_TYPE @comment

--类型 ---@type MY_TYPE\|OTHER_TYPE @comment

--别名 ---@alias NEW_NAME TYPE

--参数 ---@param param_name MY_TYPE\|other_type @comment

--返回值 ---@return MY_TYPE\|OTHER_TYPE @comment

--字段 ---@field public\|protected\|private field_name FIELD_TYPE\|OTHER_TYPE @comment

--泛型 ---@generic T1 : PARENT_TYPE , T2 \[: PARENT_TYPE]

--不定参数 ---@vararg TYPE

--内嵌语言 ---@language LANGUAGE_ID

--数组 ---@type MY_TYPE\[\]

--字典 ---@type table<KEY_TYPE, VALUE_TYPE>

--函数 ---@type fun(param:MY_TYPE):RETURN_TYPE

官网完整例子

---@class Transport @parent class

---@field public name string

local transport = {}

function transport:move() end

---@class Car : Transport @Car extends Transport

local car = {}

function car:move() end

---@class Ship : Transport @Ship extends Transport

local ship = {}

---@param type number @parameter type

---@return Car|Ship @may return Car or Ship

local function create(type)

-- ignored

end

local obj = create(1)

---now you can see completion for obj

---@type Car

local obj2

---now you can see completion for obj2

local list = { obj, obj2 }

---@param v Transport

for _, v in ipairs(list) do

---not you can see completion for v

end

自己验证例子

---@class TestBase @基类

---@field protected key number @基类字段

---@class Test : TestBase @测试类

---@field bool boolean @boolean 类型字段

---@field numberArray number\[\] @数组

---@field numberDictionary table<number,number> @字典

---@type Test

local Test = {}

---@type number @number 类型字段(后期扩展字段 IDE 不能识别注释)

Test.num = 0

---方法 1

function Test:Func1()

--字段测试

self.key = 0 --能跳转基类

self.bool = false

self.num = 1 --IDE 不能识别注释

for i, v in ipairs(self.numberArray) do end

for k, v in pairs(self.numberDictionary) do end --遍历能识别 k v 类型

--方法测试

self:Func2("张三")

local tempFunc3 = self:Func3("李四")

local tempFunc4A, tempFunc4B = self:Func4("王五", false)

local tempFunc5 = self:Func5(false)

1

2

3

4

5

end

---方法 2 有参数

---@param name string @名字

function Test:Func2(name)

end

---方法 3 有返回值

---@return string @返回类型

function Test:Func3(name)

return name

end

---方法 4 多参数 多返回值

---@param name string @名字

---@param sex boolean @性别

---@return string , number @返回类型

function Test:Func4(name, sex)

return name, sex

end

---方法 5 参数多类型 返回值多类型

---@param sex string | boolean @性别

---@return string | boolean @返回类型

function Test:Func5(sex)

return sex

end

---方法 6 参数为方法

---@param func fun(key:number):string @函数

function Test:Func6(func)

return func(1)

end

--使用 see 注解来标注一个引用

---@see Test#Func1

--下面的不常用

--不定参数注解

---@vararg string

---@return string

local function format(...)

local tbl = { ... } -- inferred as string\[\]

end

--泛型

--几乎不用 C#用是因为用 object 作为参数 有装箱拆箱消耗 lua 语言天然不需要

---@class Goods @物品基类

---@field public price number @价格

---@class Food : Goods @食物

---@field public cal number @卡路里

---@class Phone : Goods @手机

---@field public battery number @电量

---@generic T : Goods

---@param object T

function Test:GetPrice(object)

return object.price

end

--内嵌语言

---@language JSON

local jsonText = [[{

"name":"Emmy"

}]]

return Test

相关推荐
BuHuaX1 天前
Lua 与 ToLua:运行机制及热更新原理
开发语言·unity·junit·c#·lua
海棠Flower未眠1 天前
下单请求处理流程:商品维度分布式锁与 Redis 预扣库存
redis·分布式·junit
努力努力再努力wz1 天前
【Lua 入门系列】模块与包(一):从多文件组织到require 运行时加载机制、模块缓存、预加载搜索与 Lua 文件搜索机制
开发语言·junit·lua
CarIise3 天前
Spring 框架:多配置文件、开发方式与 IOC 注解
junit·maven·jar
努力努力再努力wz3 天前
【Lua入门系列】从 Table 到元表与元方法:一文理解 Lua 的行为扩展机制
开发语言·junit·lua
麻瓜code4 天前
秒杀优化三连:Lua + 阻塞队列 + Redis Stream,响应从 3.4 秒到毫秒级
redis·junit·lua
努力努力再努力wz6 天前
【Lua 入门系列】从顺序执行到分支与循环:一文理解 Lua 控制结构、作用域与跳转规则
junit·单元测试·lua
努力努力再努力wz7 天前
【Lua入门系列】从动态类型到变量作用域:彻底理解 local、全局变量与跨文件访问
开发语言·junit·lua
aloha_7899 天前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
极小狐20 天前
MR 里测试摘要空白、覆盖率不显示?JUnit 与覆盖率配置 9 步排查
数据库·ci/cd·junit·单元测试·mr·devops·代码覆盖率