Xan*_*anx 3 lua operator-overloading metatable meta-method
我正试图在Lua中使用我自己的长度方法来处理字符串.我已成功覆盖了字符串的len()方法,但我不知道如何为#manrator执行此操作.
orig_len = string.len
function my_len(s)
print(s)
return orig_len(s)
end
string.len = my_len
abc = 'abc'
Run Code Online (Sandbox Code Playgroud)
如果我打电话:
print(abc:len())
Run Code Online (Sandbox Code Playgroud)
它输出:
abc
3
Run Code Online (Sandbox Code Playgroud)
但
print(#abc)
Run Code Online (Sandbox Code Playgroud)
仅输出'3',这意味着它称为原始长度函数而不是我的.有没有办法让#调用我的长度函数?
你不能覆盖#
Lua中的字符串操作符,甚至不能覆盖metatables:__len
metamethod不适用于字符串.
事实上,真的没有任何概念可以覆盖 Lua中的任何运营商.Lua metamethods是后备:当Lua无法继续自己时,它们会被使用.因此,算术元方法不适用于数字,长度元方法不适用于字符串.
表的情况不同,因为它们用于在Lua中实现对象.