Я хотел написать максимально простую функцию, которая позволяла бы мне возвращать нужное значение в безымянной таблице, и в идеале она должна быть примерно такой:
function RL_MyTool:Version(n)
return {"0.4.0", "20221003-0230", "13.5.5"}[n]
end
Но, конечно, это не разрешено в Lua...
Итак, навскидку, я могу подумать об этих двух других возможностях:
1:
function RL_MyTool:Version(n)
local t = {"20221003-0230", "13.5.5"}
return t[n] or "0.4.0"
end
2:
function RL_MyTool:Version(n)
local n, t = n or 1, {"0.4.0", "20221003-0230", "13.5.5"}
return t[n]
end
Оба они немного отличаются друг от друга, но делают то же самое, считая с преимуществом возврата значения по умолчанию, если аргумент не указан, что хорошо. НО... Как вы думаете, у меня все еще есть возможность написать это самым простым способом, описанным выше? По сути, я бы хотел, чтобы даже не нужно было использовать одну переменную или объявление таблицы вместе с функцией, но при этом позволить мне возвращать указанную запись таблицы при вызове.
Ну вот и все. Конечно, если это, в конце концов, невозможно (как я боюсь), это не будет концом света 🙄, но я хотел быть уверен, что не упустил ни одного трюка Lua или чего-то, что позволило бы мне сделать это более похоже на то, что я сначала представил... Спасибо!
P.S. О, я не понимаю, как, но, конечно, если бы этого можно было достичь без необходимости даже вообще использовать таблицу, это было бы столь же правильно или даже лучше.
Обновлено: Кстати, для протокола и на основе ответа @Piglet (отлично!) Я должен уменьшить его еще больше следующим образом:
function RL_MyTool:Version(n)
return ({"0.4.0", "20221003-0230", "13.5.5"})[n or 1]
end
В то же время немного улучшить удобство использования/обслуживания кода, избегая дублирования значений... Беспроигрышный вариант 😁
🤔 Ну, в этом случае я думаю, что я оставлю так, потому что здесь я также рассматриваю следование «стилю» в основе других официальных инструментов, но это, конечно, хорошая рекомендация для общих случаев, когда обычно оптимизация отдайте предпочтение... Так что спасибо, что указали на это!
Звучит как отстойный стиль. Я вижу возможность назвать таблицу как преимущество.
Ну, это может быть немного более «сложно». На самом деле оригинальные инструменты никогда не использовали ничего подобного, потому что у них, похоже, не было необходимости возвращать более одного элемента... Но я это делаю, потому что хочу максимально уменьшить количество этих дополнительных маленьких функций. насколько это возможно (который, кстати, помимо того, что он крошечный, будет запускаться только один раз), и это более подходящий способ ввести мое изменение в соответствии с существующими, не нужно помещать слишком много кода только в одну строку и делать их менее читаемыми. Хм, я надеюсь, что это имеет (какой-то) смысл...
Просто поместите таблицу в скобки.
function RL_MyTool:Version(n)
return ({"0.4.0", "20221003-0230", "13.5.5"})[n] or "0.4.0"
end
Но какова цель этого? Код должен легко читаться и работать над ним. Нет абсолютно никаких причин не использовать локальную таблицу. Вам не нужно платить доллар за каждую строку кода.
Оно работает! Это ТОЧНО тот «трюк» Lua, который я ожидал пропустить или что-то в этом роде, спасибо! На самом деле я уже играл с несколькими комбинациями скобок, потому что я читал в руководстве по Lua, что они могут быть полезны для решения определенных ситуаций с несколькими возвратами функций, но ни одна из них не работала для меня в этом случае до сих пор :)
Да, и причина находится на полпути между эстетикой и функциональностью (больше первой в данном случае, я должен признать 🙄) результирующего кода, но иногда все имеет значение, даже если это только для задачи сведения к минимуму (и в данном случае это не усложняет чтение, так что это беспроигрышный вариант... Поэтому еще раз спасибо!
Вы должны перетаскивать таблицу из функции, чтобы избежать ее повторного создания (что создает таблицу, которая сразу же становится мусором после того, как функция работает с ней) при каждом вызове функции.