Lua覆盖字符串#

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',这意味着它称为原始长度函数而不是我的.有没有办法让#调用我的长度函数?

lhf*_*lhf 7

你不能覆盖#Lua中的字符串操作符,甚至不能覆盖metatables:__lenmetamethod不适用于字符串.

事实上,真的没有任何概念可以覆盖 Lua中的任何运营商.Lua metamethods是后备:当Lua无法继续自己时,它们会被使用.因此,算术元方法不适用于数字,长度元方法不适用于字符串.

表的情况不同,因为它们用于在Lua中实现对象.