Lua之基礎函式
_G
變數前面不要加 local 都可以稱之為全域性變數
全域性變數其實本質上也是一個table,它把我們建立的全域性變數都儲存到一個table裡了。
而這個table的名字是:_G
s=6
print(s)
print(_G["s"]);
print(_G.s);
type(v)
將引數的型別編碼為一個字串返回。 函式可能的返回值有 "nil
" (一個字串,而不是 nil 值), "number
", "string
", "boolean
", "table
", "function
", "thread
", "userdata
"。
tostring(v)
可以接收任何型別,它將其轉換為人可閱讀的字串形式。 浮點數總被轉換為浮點數的表現形式(小數點形式或是指數形式)。 (如果想完全控制數字如何被轉換,可以使用
tonumber(e,[,base])
如果呼叫的時候沒有 base
, tonumber
嘗試把引數轉換為一個數字。 如果引數已經是一個數字,或是一個可以轉換為數字的字串, tonumber
就返回這個數字; 否則返回 nil。
select(index,...)
如果 index
是個數字, 那麼返回引數中第 index
index
必須是字串 "#"
, 此時 select
返回引數的個數。
ipairs(t)
返回三個值(迭代函式、表 t
以及 0 ), 如此,以下程式碼
for i,v in ipairs(t) do
--body
end
將迭代鍵值對(1,t[1]
) ,(2,t[2]
), ... ,直到第一個空值。
pairs(t)
如果 t
有元方法 __pairs
t
為引數呼叫它,並返回其返回的前三個值。
否則,返回三個值:next
函式, 表 t
,以及 nil。 因此以下程式碼
for k,v in pairs(t) do
--body
end
能迭代表 t
中的所有鍵值對。
print(t)
接收任意數量的引數,並將它們的值列印到 stdout
。 它用 tostring
函式將每個引數都轉換為字串
rawequal(v1,v2)
在不觸發任何元方法的情況下 檢查 v1
是否和 v2
相等。 返回一個布林量。
rawget(table,index)
在不觸發任何元方法的情況下 獲取 table[index]
的值。 table
必須是一張表; index
可以是任何值。
ta={"1",2,"rrr",6}
print(rawget(ta,3))
--rrr
rawlen(v) --5.2以上
在不觸發任何元方法的情況下 返回物件 v
的長度。 v
可以是表或字串。 它返回一個整數。
rawset
在不觸發任何元方法的情況下 將 table[index]
設為 value
。 table
必須是一張表, index
可以是 nil 與 NaN 之外的任何值。 value
可以是任何 Lua 值。
這個函式返回 table
。
ta={2,23,"33"}
rawset(ta,2,"44")
for k,v in pairs(ta) do
print(k,v)
end
--ta={2,"44","33"}
setmetatable(table, metatable) / getmetatable(object)
給指定表設定元表/獲取原表
1.元方法名
Lua其實已經規定好了各種算術操作符的元方法名字,如:
__add:加法
__sub:減法
__mul:乘法
__div:除法
__unm:相反數
__mod:取模
__pow:乘冪
__eq :==
__lt :<
__le :>=
local mt = {};
mt.__add = function(t1, t2)
print("兩個table相加");
end
local t1 = {};
local t2 = {};
-- 設定元表
setmetatable(t1, mt);
setmetatable(t2, mt);
-- 進行加法操作
local result = t1 + t2;
--兩個table相加