我将如何在lua中重制:lower()

时间:2018-04-24 20:35:06

标签: lua

我如何制作字符串元表 所以我可以做到

local test = "HeLlO HoW ARE YoU"
print(test:lowercase())

但我不想使用默认:lower()string.lower(str) / lower(str)

字符串的元表?

3 个答案:

答案 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()的行为不同,并且浪费时间寻找其真正的作用。