Троичный оператор Lua ищет крайний случай - PullRequest
0 голосов
/ 27 января 2019

Сегодня я решаю простые Функция if kata в кодовых войнах. этот ката, если он очень прост, и требует реализации function, который работает как троичный оператор bool ? f1() : f2().

Я был очень удивлен, что был скрытый случай, когда return bool and f1() or f2() решение не удалось, но return (bool and f1 or f2)() решение работает.

В каком случае bool and f1() or f2() работает с (bool and f1 or f2)()?

Спасибо

UPD ответ :

1) true and return_false() or will_call() здесь return_false и will_call будут работать.
2) (true and return_false or will_call)() только return_false запускается.

1 Ответ

0 голосов
/ 27 января 2019

Дело не в ответе, а в вещах после запуска .

Это очень просто.Я просто нахожу и отвечаю. Нечистая функция
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...