码迷,mamicode.com
首页 > 其他好文 > 详细

__index元方法

时间:2017-08-24 23:58:06      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:print   查询   定义   --   方法   int   bsp   function   主表   

如果定义了一个元表

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元方法

标签:print   查询   定义   --   方法   int   bsp   function   主表   

原文地址:http://www.cnblogs.com/xzxdm/p/7425611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!