setmetatable和__call

作者:糖果

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

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来实现的话,要指向来指向去的指针实现。

糖果

糖果

糖果
LUA教程

如果不小心安装错 SQL Server 为 Evaluation 的版本,要小心当超过 180 天之后,系统就会无法正常使用了 这几天遇到一个蛮特别的案例,原本收到的问题是 “维护计划” 忽然无法使用,即便是里面没有任何的Task,都无法顺利地执行。但从对方所提供的错误消...… Continue reading

PLUM NIZ静电容键盘怎么样?

Published on September 25, 2020

程序员如何选择合适的机械键盘

Published on September 18, 2020