问题描述
我希望字符串能够在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
。