Как бы я переделать: lower () в Луа - PullRequest
0 голосов
/ 24 апреля 2018

Как мне сделать строковую мета-таблицу, чтобы я мог сделать

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

Но я не хочу использовать значение по умолчанию :lower() Или string.lower(str) / lower(str)

Мета-таблицадля строки?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Да, добавление нового метода к 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())

Добавление новых методов к встроенным объектам или изменение существующих имеет тот недостаток, что если вы используете внешние библиотеки, эти библиотеки могутотменить ваши изменения.Так что, как правило, я не склонен это делать, но ваш пробег может варьироваться.

0 голосов
/ 25 апреля 2018

Просто изменив string

Нет ничего проще.

string.lowercase = string.lower

РЕДАКТИРОВАТЬ: Как указал user3125367 (спасибо за это), мой второй ответ не работает, потому что setmetatable не работает со строками. Хотя можно заставить его работать, обернув строку в таблицу и перенаправив вызовы методов, это кажется довольно неэффективным и похоже на то, что на самом деле сделает только программист Ruby.


В конце концов, лучший совет, который я могу вам дать: Не

Lua построен так, как он есть, и добавление пользовательских псевдонимов просто запутает людей, читающих ваш код. Если бы я увидел :uppercase() где-то в кодовой базе, я бы предположил, что он ведет себя иначе, чем :upcase(), и потратил бы впустую поиски того, что на самом деле делает.

0 голосов
/ 24 апреля 2018

Если вы просто хотите переименовать метод lowercase, просто наберите string.lowercase=string.lower.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...