У меня есть функция, которая либо может принимать два параметра, либо вызывает другую функцию для возврата этих значений (в этом случае полу-значения по умолчанию).условное присвоение нескольких значений
Скажем, первая функция выглядит следующим образом:
-- the actuall issue function:
function foo(param_1, param_2)
local bar_1, bar_2 = param_1, param_2 or getBar()
-- make funny stuff with parameters
return funnyStuffMadeWithParameters
end
function getBar()
-- some magic to get bar.
return wx , yz
end
В этом коде, если никакие параметры не дают, bar_2 бы стать WX и bar_1 останется ноль. Я знаю, почему это происходит, но я не знаю, как выразить это условное назначение таким образом, который работает.
я мог бы сделать:
local bar_1 = getBar()
local _,bar_2 = getBar()
Но я хочу, чтобы избежать нескольких вызовов функций. Также
if not bar_1 or not bar_2 then
bar_1, bar_2 = getBar()
end
Не законен, из-за есть 4 возможностей не только два:
bar_1 == nil and bar_2 == nil
bar_1 == nil and bar_2 has value
bar_1 has value and bar_2 is nil
bar_1 has value and bar_2 has value
В каждом случае, я только хочу, чтобы Asign по умолчанию для отсутствующего значения, а не как, если один уже имеет один.
Мой первый, хотя было что-то вроде:
bar_1, bar_2 = (param_1 or getBar()), (param_2 or _,getBar())
Но это не законны синтаксис.
EDIT: я мог бы сделать:
def_bar_1, def_bar_2 = getBar()
bar_1 = param_1 or def_bar_1
bar_2 = param_2 or def_bar_2
Но это может быть вызов ненужной функции.
Это именно то, что я написал в EDIT-Block. возможно, ненужный functioncall. – Sempie
Обновлен с другим вариантом, где 'getBar' стоит дорого. – dlask