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)
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