Как называются все функции из строковой библиотеки Lua 5.3?

Вот закрытие регистра имени функции, которое я использую для регистрации имен библиотеки:

Объект Pool:

function FooBarPool()
  local Names = {}
  local self = {}
    function self:Register(fFoo,sName)
      if(fFoo) then
        Names[fFoo] = sName
      end
    end
    function self:GetName(fFoo)
      return Names[fFoo] or "N/A"
    end
  return self
end

Создать объект Pool

local Pool = FooBarPool()

Зарегистрировать известные функции библиотеки

Pool:Register(string.sub,"string.sub")
Pool:Register(string.gsub,"string.gsub")
Pool:Register(string.match,"string.match")
Pool:Register(string.gmatch,"string.gmatch")
Pool:Register(string.find,"string.find")
Pool:Register(string.gfind,"string.gfind")
Pool:Register(string.format,"string.format")
Pool:Register(string.byte,"string.byte")
Pool:Register(string.char,"string.char")
Pool:Register(string.len,"string.len")
Pool:Register(string.lower,"string.lower")
Pool:Register(string.upper,"string.upper")
Pool:Register(string.rep,"string.rep")
Pool:Register(string.reverse,"string.reverse")

for k,v in pairs(string) do
  print(tostring(v) .. " : "..Pool:GetName(v))
end

2 ответа

Решение

Если вы добавите print(k,v) до вашего последнего цикла, вы увидите, что вы пропали без вести string.dump,

Функция string.gfind не является стандартным Он присутствовал в Lua 5.0, но был переименован в string.gmatch в Lua 5.1.

Вы можете получить все имена в string библиотека с

for k in pairs(string) do
    print(k)
end

или посмотрите руководство.

Почему бы не перечислить строковые функции библиотеки строк в массиве, а затем выполнить их итерацию с помощью функции пар, таким образом: strings = {"string.sub", "string.gsub", ..., "string.reverse"}; для _k,v попарно (строки) сделать print(v) end; Я считаю, что это проще, чем ответы, приведенные выше. Кстати, есть ли лучший способ распаковать все строковые функции библиотеки строк, не прибегая к их перечислению в таблице?

Другие вопросы по тегам