Если вы действительно хотите сделать это в наиболее компактном виде возможно, вы можете создать функцию для этого. Обычно мне требуется только один параметр для каждого условия, но если вам абсолютно необходим тот, который обрабатывает множественные числа, есть два способа сделать это.
Вариант № 1: Возьмите таблицы:
function iff(cond, tbl1, tbl2)
if(cond) then
return unpack(tbl1)
else
return unpack(tbl2)
end
end
Очевидно, что это требует, чтобы вы всегда проходят таблицы. Если вам нужны только одиночные значения, вам понадобится вторая версия функции. Это предпочтительнее добавлять условную логику на основе типов, что замедляет ваш код.
Вариант № 2: VARIADIC:
--Number of parameters ought to be even.
--The first half are returned if the condition is true,
--the second half if it is false.
function iff(cond, ...)
if(cond) then
return ... --Yes, you're returning all of them, but the user shouldn't be trying to take more than the first half.
else
return select((select("#", ...))/2, ...)
end
end
использовать если заявление? –
@Mooing Duck, я ненавижу «если заявления», они большие и уродливые. –
Они также предотвращают такие глупые ошибки, как у вас в коде. Вы бы скорее сжали код или код, который действительно работает? –