代码之家  ›  专栏  ›  技术社区  ›  Dmitry Dmitriev

求边值的lua三值算子

lua
  •  1
  • Dmitry Dmitriev  · 技术社区  · 5 年前

    今天我解决简单的问题 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)() 是吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Martijn Pieters    5 年前

    这很简单。我只是找到答案。 不纯函数
    一。 true and a() or b() 如果a()返回false,则激发a(),然后执行b()。
    2. (true and a or b)() 只触发一个()
    所以在第一种情况下,激发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