作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一个关于Lua和元表的初学者问题,以一个简单的Hello-World为例,涉及len
事件,不幸的是它没有返回预期的结果(我使用的是从 Ubuntu 官方存储库安装的 Lua 5.1)。
案子
这是示例:
Test_Type = {};
function Test_Type.__len (o)
return 1;
end;
function new_test ()
local result = {};
setmetatable(result, Test_Type);
return result;
end;
do
local a_test = new_test();
print (#a_test);
print(getmetatable(a_test).__len(a_test));
end;
0
1
1
,但它显示
0
,令我大吃一惊。
#
相当于:
function len_event (op)
if type(op) == "string" then
return strlen(op) -- primitive string length
else
local h = metatable(op).__len
if h then
return (h(op)) -- call handler with the operand
elseif type(op) == "table" then
return #op -- primitive table length
else -- no handler available: error
error(···)
end
end
end
print (#a_test);
和
print(getmetatable(a_test).__len(a_test));
结果应该是一样的,不是吗?
metatable(op)
而它应该是
getmetatable(op)
?至少我试过了
print(metatable(a_test).__len(a_test));
,并以错误结束。
最佳答案
来自 http://lua-users.org/wiki/LuaFaq :
Why doesn't the __gc and __len metamethods work on tables?
__len
on tables is scheduled to be supported in 5.2. See LuaFiveTwo.
__len
在 table 上不起作用。事实上,在 Lua 5.2 上运行你的代码会产生
1
1
正如预期的那样。
关于lua - 你好元表.__len 世界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766510/
一个关于Lua和元表的初学者问题,以一个简单的Hello-World为例,涉及len事件,不幸的是它没有返回预期的结果(我使用的是从 Ubuntu 官方存储库安装的 Lua 5.1)。 案子 这是示例
这是一个小的 C 测试程序来演示我所看到的。它向 Lua 注册一个新的对象类型并执行一个 Lua 脚本。当脚本调用 __len 元方法时,我希望堆栈上只传递一个参数——对象 userdata。相反,它
我是一名优秀的程序员,十分优秀!