#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 =(base.a)
local inst ={}
(inst.a)
setmetatable
(inst, base)
(inst.a)
base.__index =base
print(inst.a)
arg 物件 和 select 方法均是獲取 可變引數 ...
且兩者使用上互斥, 使用了select, lua解析器就不會再構造arg物件。
functionfunc(...) 定義的函式, 使用時候 func(a, b, c)printarglength(a, ...) --
print(select("#", ...))
print(#arg) --
print(select(2, ...))
endprintarglength(
1, 2, 5)
在此函式定義中, 只能獲取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
localmoduleb.luaprint = 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
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...