Дело не в ответе, а в вещах после запуска .
Это очень просто.Я просто нахожу и отвечаю. Нечистая функция
1. true and a() or b()
запускает a (), если a () возвращает false, тогда выполняется b ().
2. (true and a or b)()
запускает только a ()
Так что в первом случае срабатывает a () и b (), и они оба выполняют свою работу.
local x = 0
function f1() x = x + 1 end
function f2() x = x + 1 end
-- this function fires both f1() and f2()
function if1(b,f1,f2) return b and f1() or f2() end
-- x == 2
x = 0
-- this function fires only f1()
function if2(b,f1,f2) return (b and f1 or f2)() end
-- x == 1