Lua學習筆記(三)

2021-10-06 18:26:58 字數 1424 閱讀 8082

1. 元表metatable

原型:

關於__index, _newindex, lua 查詢乙個表元素時的規則,其實就是如下 3 個步驟:

在表中查詢,如果找到,返回該元素,找不到則繼續

判斷該錶是否有元表,如果沒有元表,返回 nil,有元表則繼續。

判斷元表有沒有 __index 方法,如果 __index 方法為 nil,則返回 nil;如果 __index 方法是乙個表,則重複 1、2、 3;如果 __index 方法是乙個函式,則返回該函式的返回值。

有點類似於c++中的操作符過載

例子:

-- 自定義計算表中最大鍵值函式 table_maxn,即計算表的元素個數

function table_maxn

(t) local mn =

0for k, v in

pairs

(t)do

if mn < k then

mn = k

endendreturn mn

end-- 兩表相加操作

mytable =

setmetatable(,

)secondtable =

mytable = mytable + secondtable

for k,v in

ipairs

(mytable)

doprint

(k,v)

end

模式

描述__add

對應的運算子 『+』.

__sub

對應的運算子 『-』.

__mul

對應的運算子 『*』.

__div

對應的運算子 『/』.

__mod

對應的運算子 『%』.

__unm

對應的運算子 『-』.

__concat

對應的運算子 『…』.

__eq

對應的運算子 『==』.

__lt

對應的運算子 『<』.

__le

對應的運算子 『<=』.

__call

呼叫乙個值時呼叫

_tostring

修改表的輸出行為

-- 定義元方法__call

mytable =

setmetatable(,

)newtable =

print

(mytable

(newtable)

)

mytable =

setmetatable(,

)print

(mytable)

ref:

Lua學習筆記 lua堆疊

首先了解一下c 與lua之間的通訊 假設在乙個lua檔案中有如下定義 hello.lua檔案 請注意紅色數字,代表通訊順序 1 c 想獲取lua的myname字串的值,所以它把myname放到lua堆疊 棧頂 以便lua能看到 2 lua從堆疊 棧頂 中獲取myname,此時棧頂再次變為空 3 lu...

lua學習筆記

近日時間比較充裕,學習一下lua語言,順便寫下筆記,方便以後加深學習。c c 呼叫lua動態庫及標頭檔案位址 用於c c 嵌入lua指令碼解析 也可以到或找適合自己的版本。一 hello world 哈哈,先使用經典的hello world帶進門 1.在 執行 鍵入cmd開啟dos視窗,並將當前目錄...

Lua 學習筆記

1 關於table lua 中的 table 是python 中的 list 和 dict 的混合體。t 相當於 t 簡單的看,實際上完全相當於 python 中的 dict 不過實際對於鍵為整數的,是放在 list 中的,方便快速索引。當然基於節省記憶體的考量,對於跳躍的大整數鍵,依然是放在 di...