1. 程式人生 > >Lua之基礎函式

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

 個之後的部分; 負的數字會從後向前索引(-1 指最後一個引數)。 否則,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相加