lua知識總結

2021-08-18 13:41:33 字數 2601 閱讀 7516

1、lua實現深拷貝

function deepcopy( obj )      

local intable = {};

local function func(obj)

if type(obj) ~= "table" then --判斷表中是否有表

return obj;

end

local newtable = {}; --定義乙個新錶

intable[obj] = newtable; --若表中有表,則先把表給intable,再用newtable去接收內嵌的表

for k,v in pairs(obj) do --把舊表的key和value賦給新錶

newtable[func(k)] = func(v);

end

return setmetatable(newtable, getmetatable(obj))--賦值元表

end

return func(obj) --若表中有表,則把內嵌的表也複製了

end

2、lua實現列印table結構

local function intentstr(level)

local str=" "

for i=1,level do

str = str.." "

endreturn str

endlocal function printtable(tb,last_tb,level)

if level>3 then return end

if level==0 then print(",level+1)

endlast_tb = tb

printtable(v,last_tb,level+1)

print(str.."}")

endend

if level==0 then print("}") end

endtest = }

rawset(test,'aa','aaa')

printtable(test,{},0)

3、生成唯一長度為len字串

function e_utility_getuid(len)

local template = string.rep('x',len-5)

d = io.open("/dev/urandom", "r"):read(4)

math.randomseed(os.time() + d:byte(1) + (d:byte(2) * 256) + (d:byte(3) * 65536) + (d:byte(4) * 4294967296))

local rdmstr = string.gsub(template, "x", function (c)

local v = (c == "x") and math.random(0, 0xf) or math.random(8, 0xb)

return string.format("%x", v)

end)

return string.sub(time,6,10)..rdmstr

end

4、lua實現sleep

local function sleep(n)

os.execute("sleep "..n)

endlocal socket = require("socket")

local function ssleep(n)

socket.select(nil,nil,n)

endlocal i=0

while true do

sleep(1)

print("time:"..os.time())

ssleep(1)

print("time:"..os.time())

end

5、清除table陣列中重複元素

function e_utility_del_dup_elem(tb)

local tmp={}

for key,val in pairs(tb) do

tmp[val]=true

endlocal new_tb = {}

for key,val in pairs(tmp) do

table.insert(new_tb,key)

endreturn new_tb

end

6、陣列刪除指定元素 包含重複的情況

function e_utility_array_del(array, elem)

if not next(array) then return end

table.sort(array)

local pos=1

while true do

if not array[pos] then break end

if array[pos]==elem then table.remove(array,pos)

else pos = pos +1 end

endend

Lua基礎總結

本文總結了lua資料型別,表示式,基本語法。lua單行注釋 多行注釋 全域性變數 不需要宣告,訪問乙個沒有初始化的全域性變數也不會出錯,只是結果是nil。刪除乙個全域性變數,只給他賦值nil,即b nil。lua資料型別 8種 nil,boolean,number,string,undata,fun...

Lua資料總結

lua指令碼是乙個很輕量級的指令碼,也是號稱效能最高的指令碼,用在很多需要效能的地方,比如 遊戲指令碼,nginx,wireshark的指令碼,當你把他的原始碼下下來編譯後,你會發現直譯器居然不到200k,bin sh都要1m,macos平台 而且能和c語言非常好的互動。執行lua是類c的,是大小寫...

Lua語言總結

1 要退出互動模式和直譯器,只需輸入 os.exit 2 在互動模式執行程式塊可以使用函式dofile,這個函式就可以立即執行乙個檔案。應用示例 dofile f mylua mystudylua.lua 3 lua中的識別符號可以是由任意字母 數字和下劃線構成的字串,但不能以數字開頭。4 lua是...