LUA語言注意點歸集

2022-03-31 08:14:49 字數 3268 閱讀 7980

#tab 和 table.getn()

我們修改table:

tab =print(#tab)--*****>4print(table.getn(tab))--*****>4tab[9]=10print(#tab)--*****>4print(table.getn(tab))--*****>4print(tab[9])--*****>10

使用上述的兩種方法,發現返回的table元素依舊是4。為什麼呢,我們再把上面的**修改為:

tab =print(#tab)--*****>4print(table.getn(tab))--*****>4tab[5]=10print(#tab)--*****>5print(table.getn(tab))--*****>5print(tab[5])--*****>10

我們可以看到,這段**可以得到我們想要的結果。

如果要列印總體數目, 包括以hash值為key的元素, 需要使用for迴圈

print("----------")

for _, v in pairs(tab) do

print(v)

end對於lua裡沒有continue的問題相信很多用lua的人都遇到過,官方也有作出了解釋。

那麼如何用別的機制來**continue呢?有乙個比較簡單的方法:在迴圈內套乙個repeat ... until true,再將想用continue的地方寫成break。如:

for i = 1, 10 do

repeat

if i == 5 then

break

endprint(i)

until true

end

如果把物件特殊對待為類原型, 則為類繼承。

setmetatable 指定元表 

元表的__index指向為被繼承的物件。

local base = 

print

(base.a)

local inst ={}

print

(inst.a)

setmetatable

(inst, base)

print

(inst.a)

base.__index =base

print(inst.a)

arg 物件 和 select 方法均是獲取 可變引數 ...

且兩者使用上互斥, 使用了select, lua解析器就不會再構造arg物件。

function

printarglength(a, ...) --

print(select("#", ...))

print(#arg) --

print(select(2, ...))

endprintarglength(

1, 2, 5)

func(...) 定義的函式, 使用時候 func(a, b, c)

在此函式定義中, 只能獲取arg物件, 如果需要 類似 func(a, b, c)形式 將arg物件, 傳遞給呼叫函式, 則需要使用unpack方法

function unpack(t, i)

i = i or 1

if t[i] then

return t[i], unpack(t, i + 1)

endend

例如將 format中 元素個數不固定, 但是format在第乙個的函式定義情況:

function fwrite(fmt, ...)

return io.write(string.format(fmt, unpack(arg)))

end如果乙個函式定義為 func(tab, ....)

此函式, 需要返回 tab(乙個表)的upack形式(,分割引數), 並新增...引數(若干, 分割引數), 則使用此函式

local function myunpack(packs, ...)

local ret = {}

if "table" == type(packs) then

for i, v in ipairs(packs) do

ret[i] = v

endend

local n = table.maxn(ret)

for i, v in ipairs(arg) do

ret[n + i] = v

endreturn unpack(ret)

end

module(..., package.seeall)

1、 第乙個引數為..., 表示 此模組以檔名為準, 如果不是則使用此字串作為模組名。

2、 第二個引數為 seeall 表示, 此模組內可以引用 所有全域性環境。

3、 require 返回的module物件為乙個表, 此表沒有元表, 但是如果 定義的seeall, 則可以引用全域性環境。 即此模組可以訪問全域性環境, 不是使用元表來實現。

moduleaa.lua

local

print = print

local

getfenv = getfenv

local

pairs = pairs

local

tostring = tostring

--module (..., package.seeall)

module

(...)

a = 1

function

printtest()

print("

module in printaa print")

for k,v in

pairs(getfenv(1)) do

print("

k="..k.."

, v=

"..tostring

(v))

endend

moduleb.lua

local model = require("

moduleaa")

--model.printtest()

print(type

(model))

for k,v in

pairs(model) do

print("

k="..k.."

, v=

"..tostring

(v))

endmodel.

print("

helll

")

LUA語言注意點歸集

tab 和 table.getn 我們修改table tab print tab 4print table.getn tab 4tab 9 10print tab 4print table.getn tab 4print tab 9 10 使用上述的兩種方法,發現返回的table元素依舊是4。為什麼...

lua環境 lua語法注意點

sudo apt get install lua5.2 方法1 命令列輸入lua i進入互動程式設計介面,輸入print hello world.回車 方法2 寫lua指令碼,如helloworld.lua,檔案內容為print hello world.命令列執行命令lua helloworld.l...

Lua靈活的語法注意點

lua靈活的語法注意點 1.每個語句結尾的分號 是可選的,但如果同一行有多個語句最好用 分開 a 1 b a 2 ugly,but valid 2.全域性變數不需要宣告,給乙個變數賦值後即建立了這個全域性變數,訪問乙個沒有初始化的全域性變數也不會出錯,只不過得到的結果是 nil.print b ni...