如何解决我该如何摆脱Lua上的“ metatable已锁定”的问题?以及如何添加getrawmetatable?
我希望字符串能够在Lua中使用%
运算符,但是每当我这样做时:
getmetatable("").__mod = function(a,b)
if not b then
return a
elseif type(b) == "table" then
return string.format(a,unpack(b))
else
return string.format(a,b)
end
end
错误
attempt to index string with '__mod'
debug.getmetatable
不起作用
debug.getmetatable("").__mod = function(a,b)
end
end
错误attempt to call a nil value
所以我尝试了getmetatable("")
,它返回了"The metatable is locked"
。
如何摆脱Lua中的"The metatable is locked"
杂物?
我对字符串metatable没有任何要求。我还发现debug.getmetatable
是nil
而不是函数。
这也发生在工作空间getmetatable(workspace)
和全局游戏getmetatable(game)
我发现合成酶摆脱了这个问题:https://x.synapse.to/docs/development/objects_mts.html
使用名为getrawmetatable
的函数?
如何添加getrawmetatable
?
解决方法
如果debug.getmetatable
不存在,则一定不能从标准Lua环境中运行脚本。而是从嵌入Lua的应用程序中运行它。
这样的应用程序对它允许您从Lua访问的内容具有完全控制。因此,如果它删除了debug.getmetatable
,并且删除了通过getmetatable
检索字符串元表的能力(通过为字符串元表提供一个字符串__metatable
字段),您将无能为力从Lua本身进行修改所述的metatable。
此外,除非您对环境有控制权(例如:您是嵌入Lua的程序的作者,但如果您是,则已经知道自己做了什么),那通常是不好的形式来操纵Lua的基本方面,例如字符串元表。在这种环境下,Lua用户将不知道对字符串%
意味着什么。
只需像其他所有人一样键入string.format
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。