__index元方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__index元方法相关的知识,希望对你有一定的参考价值。

如果定义了一个元表

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元方法的主要内容,如果未能解决你的问题,请参考以下文章

Lua中强大的元方法__index详解

表相关的元方法(Metamethods)The __index Metamethod

__newindex元方法

Chapter 16_3 多重继承

lua的元表与元方法

Lua学习