1. 程式人生 > >__index元方法

__index元方法

func 元表 fun 方法 lua 一個表 urn 什麽 ==

如果定義了一個元表

table = {a = 1}

setmetatable(table, {__index = {b = 2}})

那麽如果在table中取沒有定義的鍵,那麽lua就會在__index元方法裏面去找,前提是__index是一個表,她還可以是一個函數

print(table.a,table.b)

------------

那麽當__index元方法是函數會怎麽樣呢?lua會調用這個函數,並傳入表和你寫的那個鍵

t = setmetatable({a=1},{__index = function(table,key)

    --如果你查詢一個表中沒有的函數,lua就會調到這裏來

    table.b = 2

    print(table.b,key)

    --[[或者是

    if key == "c" then

      return "b"

    else

      return nil

    end

    ]]

  end})

print(t.a,t.hehe)

這裏首先她會打印2和hehe,然後才是1和nil。

為什麽,因為t.hehe是查找,主表沒找到,找元表,元表也沒找到(沒有return出來),自然是nil

__index元方法