where-clause - 关键字 - FFL : Where vs. 让

标签 where-clause let anura ffl

我试图理解以下代码:

    def() ->commands
        if(deferred_passive_abilities != [],
           let [{ability: class passive_ability, creature: class creature}] items = [];
           let found = false;
           map(deferred_passive_abilities,
             if(cmd = null, add(items, [value]), [cmd, set(found, true)])
             where cmd = value.ability.static_effect(me, value.creature));

           if(found,
              set(deferred_passive_abilities, items);
              evaluate_deferred_passive_abilities(),
              set(deferred_passive_abilities, []))
        )

Haskell 似乎同时具有 letwhere,但通过粗略阅读他们的 Haskell 文档,我并没有学到太多东西。他们还有一个 let...in,我不明白,但很高兴知道 FFL 是否有这个。

那么,使用 letwhere 有何意义?这里有必要使用let吗? (另外,可能还有一个问题:为什么需要那些分号?)

最佳答案

使用let引入了一个可以修改的变量。请注意 founditems 是如何修改的。相比之下,where 总是引入不可变符号。

FFL 中使用分号来创建命令管道。通常在 FFL 中,评估整个公式,产生一个命令或命令列表,然后执行命令。

当存在分号时,分号之前的所有内容都将被视为与分号之后的所有内容完全独立的公式。第一个公式被评估执行,然后第二个公式被评估并执行。

分号有效地允许 FFL 中更加过程化的编程风格,没有分号,它是一种纯粹的函数式语言。

关于where-clause - 关键字 - FFL : Where vs. 让,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50457299/

相关文章:

python - 使用 numpy.where 防止越界

Mysql - 从表 2 上的 SELECT 中插入表 1,表 1 上的 WHERE NOT EXIST

JavaScript:理解 for 循环中的 let 范围

javascript - 在 Chrome 代码片段中,使用 var 重新声明可以,但使用 let 则不行

syntax-error - 结合断言子句和where子句

conditional-statements - 高级 ffl : conditional expression then-expressions activation

带元组的 MySQL CASE 语句

php - WordPress 插件开发。 WHERE 子句的问题

javascript - let 语句是否在全局对象上创建属性?