糖果实验室杂货铺

Candy Lab

setmetatable和__call

1 year ago 2

作者:糖果

网上找来一个很能说明__call用法的例子:

None
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function f(tb, x, y)
    for k,v in pairs(tb) do
        print(k,v)
    end
    return x+y+tb.n
end

b = {}
b.__call = f


a = {}
function a:test()
end
a.n = 100
a.m = 200
setmetatable(a,b)
print(a(1,2))

b作为a的元表的时候,table b={}的表函数,使用__call提定的话, 在执行a(惨数列表), 参数列表和b的f函数的参数列表一致, 被指定函数的第一个参数,是一个table,里面存放的是a的成员变量和函数。

如果这种效果要有C来实现的话,要指向来指向去的指针实现。


糖果实验室

Openresty中文编程网
IKBC经典机械键盘
机械键盘领券优惠购买

Comments

There are 2 Comments to "setmetatable和__call"

Write a Comment