Непосредственно вернуть запись таблицы из (самой простой) функции в Lua

Я хотел написать максимально простую функцию, которая позволяла бы мне возвращать нужное значение в безымянной таблице, и в идеале она должна быть примерно такой:

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

В то же время немного улучшить удобство использования/обслуживания кода, избегая дублирования значений... Беспроигрышный вариант 😁

Вы должны перетаскивать таблицу из функции, чтобы избежать ее повторного создания (что создает таблицу, которая сразу же становится мусором после того, как функция работает с ней) при каждом вызове функции.

LMD 07.10.2022 09:52

🤔 Ну, в этом случае я думаю, что я оставлю так, потому что здесь я также рассматриваю следование «стилю» в основе других официальных инструментов, но это, конечно, хорошая рекомендация для общих случаев, когда обычно оптимизация отдайте предпочтение... Так что спасибо, что указали на это!

Ramon0 07.10.2022 13:27

Звучит как отстойный стиль. Я вижу возможность назвать таблицу как преимущество.

LMD 07.10.2022 15:36

Ну, это может быть немного более «сложно». На самом деле оригинальные инструменты никогда не использовали ничего подобного, потому что у них, похоже, не было необходимости возвращать более одного элемента... Но я это делаю, потому что хочу максимально уменьшить количество этих дополнительных маленьких функций. насколько это возможно (который, кстати, помимо того, что он крошечный, будет запускаться только один раз), и это более подходящий способ ввести мое изменение в соответствии с существующими, не нужно помещать слишком много кода только в одну строку и делать их менее читаемыми. Хм, я надеюсь, что это имеет (какой-то) смысл...

Ramon0 07.10.2022 18:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто поместите таблицу в скобки.

function RL_MyTool:Version(n)
    return ({"0.4.0", "20221003-0230", "13.5.5"})[n] or "0.4.0"
end

Но какова цель этого? Код должен легко читаться и работать над ним. Нет абсолютно никаких причин не использовать локальную таблицу. Вам не нужно платить доллар за каждую строку кода.

Оно работает! Это ТОЧНО тот «трюк» Lua, который я ожидал пропустить или что-то в этом роде, спасибо! На самом деле я уже играл с несколькими комбинациями скобок, потому что я читал в руководстве по Lua, что они могут быть полезны для решения определенных ситуаций с несколькими возвратами функций, но ни одна из них не работала для меня в этом случае до сих пор :)

Ramon0 05.10.2022 23:49

Да, и причина находится на полпути между эстетикой и функциональностью (больше первой в данном случае, я должен признать 🙄) результирующего кода, но иногда все имеет значение, даже если это только для задачи сведения к минимуму (и в данном случае это не усложняет чтение, так что это беспроигрышный вариант... Поэтому еще раз спасибо!

Ramon0 05.10.2022 23:56

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