мне очень странные костыли. Это я не правильно гуглю или кроме страшных костылей ничего нет?
что за костыли? для чего конкретно свитч нужен?
local c_tbl = { [1] = add, [2] = save, } local func = c_tbl[choice] if(func) then func() else print " The program has been terminated." print " Thank you!"; end например такое предлагает стаковерфлоу
коробочной функции нет
это не костыль. Это может быть очень даже эффективным решением, если очень много условий надо будет проверять (O(1) в лучшем случае). При условии, что таблица с кейсами только один раз создаётся, конечно. И функции можно тоже прямо в этой таблице объявить. local t ={ ["exit"] = function() os.exit() end, ['stat'] = function() print(some_stats()) end, -- ... }
в луа минимум оптимизации байткода... За исключением случаев когда вы используете luajit или luau конечно... если не углубляться в детали.... lua сфокусирована на минимальном синтаксисе, без кучи ключевых слов. switch/case не добавил бы ничего принципиально нового, чего нельзя было-бы решить через if statement. Ну и, я надеюсь, вы в курсе про elseif. городить if a then ... else if b then ... end end не надо
Я более чем уверен, что на это были причины, в виде сложности той-же компиляции всего этого. (В луа : уже используется как синтакисческий сахар над obj.call(obj) => obj:call(), поэтому я даже не могу себе представить как это могло выглядеть вообще в итоговом варианте... А так-же как обрабатывать такую вещь как falltrough... и вообще нужен-ли он или нет. У elseif есть смысл - он, в отличии от последовательных if, обрабатывается только если условие не сработало. А насаживать в глубину if на if - не особо удобно. я не хочу особо разглагольствовать на тему дизайна языка... это, как минимум, не продуктивно...
1. Выражение. a = b < 10 and 0 or b == 10 and 10 or 100 2. Варианты вроде тех которые подсказали, в виде таблички с ключами.
Обсуждают сегодня