鐢╨ua鏉ュ啓娓告垙鑴氭湰鐨勭‘鏄竴浠跺緢鏂逛究鐨勪簨鎯咃紝浣嗘槸鏈夋椂鍊欓渶瑕佺敤鍒版灇涓劇被鍨嬫椂灝辨湁鐐歸夯鐑︿簡錛屽洜涓簂ua閲屾椂娌℃湁鏋氫婦鍨嬪彉閲忚繖涓笢瑗跨殑錛屾墍浠ヨ浣跨敤鏋氫婦榪?寰楄嚜宸辮漿鎹竴涓嬶紝鎴戝啓浜嗕竴涓嚱鏁扮敤鏉ュ仛榪欑杞崲錛?
function CreatEnumTable(tbl, index)
assert(IsTable(tbl))
local enumtbl = {}
local enumindex = index or 0
for i, v in ipairs(tbl) do
enumtbl[v] = enumindex + i
end
return enumtbl
end
鍦ㄩ渶瑕佺敤鍒版灇涓懼彉閲忕殑鍦版柟鍙榪欐牱鐢ㄥ氨琛屼簡錛?
EnumTable =
{
"ET1",
"ET2",
}
EnumTable = CreatEnumTable(EnumTable )
print(EnumTable.ET1)
print(EnumTable.ET2)
杈撳嚭涓猴細
1
2
褰撶劧錛屼篃鍙互鎸囧畾涓嬫爣浠庡灝戝紑濮嬶紝
姣斿浠?0寮濮嬶紝鍙鎶婁笂闈㈠垱寤烘灇涓捐〃鐨勮鍙ユ崲鎴愪笅闈㈣繖鏍峰氨鍙互浜嗭細
EnumTable = CreatEnumTable(EnumTable, 10)
鍦ㄣ奝rogramming in Lua銆嬩竴涔︿腑鎻愬埌浜嗕竴涓弻绔槦鍒楃殑瀹炵幇鏂規硶錛屾垜鎶婂畠鎷挎潵鏀硅繘浜嗕竴涓嬬敤鍦ㄤ簡鎴戞鍦ㄥ埗浣滅殑涓涓猂PG娓告垙閲岋紝鐢ㄨ搗瑙夊緱 鏉ヨ繕涓嶉敊錛屽姞浜嗕竴涓狦etSize()鏉ュ彇寰桳ist鐨勫ぇ灝忥紝榪欎釜鍦ㄦ父鎴忓埗浣滀腑鐢ㄥ榪樻槸寰堝ぇ鐨刕_^
婧愪唬鐮佸涓嬶細
CList = class()
function CList:ctor()
self.m_list = { first = 0, last = -1 }
end
function CList:PushFront(value)
local first = self.m_list.first - 1
self.m_list.first = first
self.m_list[first] = value
end
function CList:PushBack(value)
local last = self.m_list.last + 1
self.m_list.last = last
self.m_list[last] = value
end
function CList:PopFront()
local first = self.m_list.first
if first > self.m_list.last then return nil end
local value = self.m_list[first]
self.m_list[first] = nil
self.m_list.first = first + 1
return value
end
function CList:PopBack()
local last = self.m_list.last
if self.m_list.first > last then return nil end
local value = self.m_list[last]
self.m_list[last] = nil
self.m_list.last = last - 1
return value
end
function CList:GetSize()
if self.m_list.first > self.m_list.last then
return 0
else
return math.abs(self.m_list.last - self.m_list.first) + 1
end
end
鍦ㄦ渶鍓嶉潰鐨勯偅鍙List = class() 榪欓噷浣跨敤浜嗕簯椋庡啓鐨勪竴涓猚lass鍑芥暟鍒涘緩涓涓被錛?
榪欎釜鍑芥暟鍙互鍦ㄤ簯椋庣殑鍗氬涓婃壘鍒幫紝涓轟簡鏂逛究璧瘋鎴戝氨鍦ㄨ繖閲屽厛鎶勪竴涓嬩簡錛?
local _class={}
function class(super)
local class_type={}
class_type.ctor=false
class_type.super=super
class_type.new=function(...)
local obj={}
do
local create
create = function(c,...)
if c.super then
create(c.super,...)
end
if c.ctor then
c.ctor(obj,...)
end
end
create(class_type,...)
end
setmetatable(obj,{ __index=_class[class_type] })
return obj
end
local vtbl={}
_class[class_type]=vtbl
setmetatable(class_type,{__newindex=
function(t,k,v)
vtbl[k]=v
end
})
if super then
setmetatable(vtbl,{__index=
function(t,k)
local ret=_class[super][k]
vtbl[k]=ret
return ret
end
})
end
return class_type
end