Lua三元运算符,寻找边缘情况

时间:2019-01-27 09:12:21

标签: lua

今天,我在代码战中解决了简单的The if function kata问题。 这个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 :(得分:1)

这与答案无关,而是关于跑步后的事情

这很简单。我只是找到并回答。 功能不完善
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