__call元方法

__call元方法可以使定义了他的表可以像函数一样使用,可以被调用,参数是另外一个表,当然这只是一个形式,调用的具体行为是自己定义的,就像重载操作符一样

模型:

t = setmetatable({},{__call =

  function(table, newtable)

    --body

    --这里定义调用自己的具体行为与结果,结果必须return出来

    return

  end

})

使用方法:local value = t(othertable) --就像函数一样使用,参数是另外一个表

时间: 2024-10-10 20:54:31

__call元方法的相关文章

Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如何定义这个指定的函数,这个指定的函数是什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连

lua元表与元方法

lua中每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连接的,但是对于两个table类型,则不能直接进行"+"操作.这需要我们进行一些操作.在lua中有一个元表(metatable),我们可以通过元表来改变一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作.比如,现在有两个table类型的变量a和b,我们可以通过metatable定义如何计算表达式a+b,具体的在Lua中是按照以下步骤进行的: 1.先判断a和b两者之一是否有元表 2.检查该元表中是否有一

Lua语言基础汇总(8) -- Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那本文就是主要讲的是如何定义这个指定的函数,这个指定的函数是什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连接

lua 元表与元方法示例

-- 1.检查是否有元表local t = {1, 2}print(getmetatable(t))     -- nilprint("----------------------")-- 2.设置元表local t = {}print(getmetatable(t))     -->nil local t1 = {}setmetatable(t, t1)print (getmetatable(t))assert(getmetatable(t) == t1)print("

[转]Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如果定义这个指定的函数,这个指定的函数时什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连

__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 学习笔记(十一)元表与元方法

在Lua中的每个值都有一套预定义的操作集合.例如可以将数字相加,可以连接字符串,还可以在table中插入一对key-value等.但是我们无法将两个table相加,无法对函数作比较,也无法调用一个字符串. 但是,Lua提供了元表与元方法来修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作.例如,假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该元表中是否有一个叫__add的字段.如果找到了该

__newindex元方法

__index元方法是访问,如果表中没有就会进元方法查找(如果有元表的话),如果元方法是表,返回元表的元素:如果元方法是函数,则返回函数的返回值 __newindex元方法就是赋值,如果元表定义了这个元方法,那么新的键值就会保存在元方法指向的表中,如果元方法是函数,就会调用函数(会传入表,写入的键,写入的值) 例: 1. t= {} local mytable = setmetatable({k = "v"},{__newindex = t}) mytable[1] = 2 print

lua编程之元表与元方法

一. 前言 lua是一种非常轻量的动态类型语言,在1993年由由Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo等人发明,lua的设计目标是轻便地嵌入宿主语言,增强系统的可扩展性和可定制性.lua的源码只有两万余行,非常精简小巧,在目前的脚本引擎中,lua的速度是最快的,这也是lua进入程序设计语言前20名,如今已经广泛应用于游戏行业,这几篇文章将会讨论下lua的几个比较重要的特性. 一门语言的类型系统是其最根本