我如何制作字符串元表 所以我可以做到
local test = "HeLlO HoW ARE YoU"
print(test:lowercase())
但我不想使用默认:lower()
或string.lower(str) / lower(str)
字符串的元表?
答案 0 :(得分:1)
如果您只想重命名方法lowercase
,只需执行string.lowercase=string.lower
。
答案 1 :(得分:0)
是的,向string
添加新方法是另一种可能性。例如,这是一个返回相同字符串的方法。
function string.identity (self)
local ret = {}
for i=1,self:len() do
local c = self:sub(i, i)
table.insert(ret, c)
end
return table.concat(ret)
end
local test = "HeLlO HoW ARE YoU"
print(test:identity())
将新方法附加到内置对象或修改现有对象的缺点是,如果您使用外部库,那么这些库可以覆盖您的更改。因此,根据经验,我倾向于不这样做,但你的里程可能会有所不同。
答案 2 :(得分:0)
string
没有比这更容易了。
string.lowercase = string.lower
编辑:正如user3125367指出的那样(感谢你),我的第二个答案不起作用,因为setmetatable
不能使用字符串。虽然可以通过将字符串包装在表中并重定向方法调用来使其工作,但这看起来非常低效,就像Ruby程序员实际上会做的事情一样。
最后,我能给你的最好建议是: Don&#tt
Lua是按原样构建的,添加自定义别名只会让读取代码的人感到困惑。如果我在代码库中的某个地方看到:uppercase()
,我会假设它在某种程度上与:upcase()
的行为不同,并且浪费时间寻找其真正的作用。