__index

Window = {}
Window.prototype = {x = 0, y = 0, width = 70, height = 100}
Window.mt = {}

function Window.new(o)
    setmetatable(o, Window.mt)
    return o
end

--[[Window.mt.__index = function (table, key)
    return Window.prototype[key]
end--]]

Window.mt.__index = Window.prototype--当我们想不通过调用__index metamethod来访问一个表,我们可以使用rawget函数,

w = Window.new{x = 10, y = 20}
print(w.width)
时间: 2024-11-07 21:21:59

__index的相关文章

__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 = f

Lua查找表元素过程(元表、__index方法是如何工作的)(转载)

文章来源于 Lua查找表元素过程(元表.__index方法是如何工作的) Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如果尝试访问了一个表中并不存在的元素时,就会触发Lua的一套查找机制,也是凭借这个机制,才能够实现“面向对象”的. 举例说明: tempTable = {} print(tempTable.memberA) --这里试图打印tempTable并不存在的成员memberA 执行结果:nil输出为nil的原因很简单,tempTable中并没有m

lua 元方法 __index

原方法 __index: 作用用于访问元表中的内容.即当通过键来访问table时,如果这个键没有值,则lua会寻找该table中的 metatable 中的__index键.如果__index指向的是一个able,则lua会在__index指向的table中查找相应的键 Lua 查找一个元表的规则: 1.在表中查找,如果找到,则返回该键指向的值.如果找不到则继续 2.判断该表是否存在元表,如果没有,则返回nil. 如果有元表则继续 3.判断元表中是否存在__index 方法,如果 __index

Lua语言基础汇总(9)-- Lua中__index和__newindex实践

前言 本文将通过几个简单的实例演示,巩固对__index和__newindex的理解,同时加深对Lua中元表和元方法的理解,如果对Lua的元表和元方法还不是很熟悉的话,请参考这篇文章:<Lua中的元表与元方法>. 具有默认值的table 我们都知道,table中的任何字段的默认值都是nil,但是通过元表,我们可以很容易的修改这一规定,代码如下: 1 2 3 4 5 6 7 8 9 function setDefault(tb, defaultValue)      local mt = {__

利用__index和__newindex实现默认值表、监控表、只读表

__index和__newindex实际上相当于是在读写表的时候分别加了一道过滤的逻辑,让读写表的操作可以被监控或说回调,利用这个特性可以实现一些带有特殊功能的表. 带有默认值的表: setdefault = function(t, v) setmetatable(t, {__index = function () return v end}) end s = {1, 2, 3} setdefault(s, 0) -- 默认值设为0 print(s.x) 一般访问不存在的域会返回nil,但经过上

Lua中强大的元方法__index详解

今天要来介绍比较好玩的内容--__index元方法 1.我是备胎,记得回头看看 咳咳,相信每一位女生都拥有或者不知不觉中拥有了一些备胎,啊,当然,又或许是成为过别人的备胎. 没有备胎的人,就不是完整的人生.(小若:停!) 我们来想象一下,如果对一个table进行取值操作,但是table根本就没有这个值呢?比如: 复制代码代码如下: local t = {        name = "hehe",    }    print(t.money); 输出结果当然是:nil t只用于name

Lua的__index和__newindex之间的沉默与合作

本文转载于笨木头的博客,嘿嘿,向大神学习 这篇文章主要介绍了Lua中__index和__newindex之间的沉默与合作,本文着重讲解了__index和__newindex之间的联系,需要的朋友可以参考下 因为不想在一篇文章里挤太多知识点,所以,有些小知识点就集合到这样的文章里吧~ 1.沉默技能——拒绝__index和__newindex效果 虽然__index和__newindex是很好用的功能,但是,有时候我们又希望很纯粹地去调用table或者给table赋值. 那,这时候怎么办?给tabl

对lua继承中self.__index = self的释疑

首先看看从lua表中查找一个键时的流程: -- 当从表t中查找键k时,lua处理如下: -- 1.t中是否有k,有则直接返回值,否则第2步 -- 2.t是否有元表, 无则返回nil, 有则第3步 -- 3.t的元表是否有__index元方法, 无则返回nil, 有则查找__index指向的表或对应的方法 ---注意两种写法 -- 写法1, 可以保持继承链 local class = {} function class:new() self.__index = self return setmet

Lua __index元方法

[Lua __index元方法] 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键.如果__index包含一个表格,Lua会在表格中查找相应的键. 如果__index包含一个函数的话,Lua就会调用那个函数,table和键会作为参数传递给函数. __index 元方法查看表中元素是否存在,如果不存在,返回结果为 nil:如果存在则由 __index 返回结果. 参考:http://www.