关键字 - FFL:Where vs. Let

keyword - FFL: Where vs. Let

我试图理解以下代码:

    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在FFL,一定非常罕见。

无论洞察力如何,分号都是绝对必要的,以便在使用绑定变量之前强制执行。换句话说,在使用分号之前,变量不存在。没有绑定值。

这与 where 有很大区别,后者不需要分号。

鉴于分号不是完全适合初学者的结构,我可以向初学者推荐有关变量的知识,让他们坚持使用 where 直到理解分号的技巧。

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

分号在 FFL 中用于创建命令管道。通常在 FFL 中,整个公式被求值,产生一个命令或命令列表,然后命令被执行

当出现分号时,分号之前的所有内容都被视为与分号之后的所有内容完全不同的公式。第一个公式是 evaluatedexecuted 然后第二个公式被评估和执行。

分号有效地在 FFL 中提供了一种更过程化的编程风格,没有分号它是一种纯函数式语言。