169 похожих чатов

Чятик, подскажи, а в луа есть свитчкейсы? Чот гугл показывает

мне очень странные костыли. Это я не правильно гуглю или кроме страшных костылей ничего нет?

10 ответов

33 просмотра

что за костыли? для чего конкретно свитч нужен?

Aleksey-Sviridkin Автор вопроса
UtoECat
что за костыли? для чего конкретно свитч нужен?

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 например такое предлагает стаковерфлоу

коробочной функции нет

Aleksey Sviridkin
local c_tbl = { [1] = add, [2] = save, } loca...

это не костыль. Это может быть очень даже эффективным решением, если очень много условий надо будет проверять (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. Варианты вроде тех которые подсказали, в виде таблички с ключами.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта