代码之家  ›  专栏  ›  技术社区  ›  Patrick Parker

关键字-ffl:where与let

  •  2
  • Patrick Parker  · 技术社区  · 6 年前

    我试图理解以下代码:

        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, []))
            )
    

    哈斯克尔似乎两者都有 let where 但我对他们的haskell医生的肤浅了解并不多。他们也有一个 let...in 我不明白,但如果有FFL的话就好了。

    那么,使用的意义是什么 对战 哪里 ?有必要使用吗 在这里?(另外,可能还有另一个问题:为什么它需要这些分号?)

    2 回复  |  直到 6 年前
        1
  •  2
  •   Denivarius    6 年前

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

    在FFL中使用分号创建 命令管道 . 通常在FFL中,整个公式是 评价的 ,生成命令或命令列表,然后命令 执行 .

    当一个半结肠出现时,在半结肠之前的所有东西都被当作一个完全独立的公式来对待在半结肠之后的所有东西。第一个公式是 评价的 执行 然后计算并执行第二个公式。

    半冒号实际上允许在FFL中使用更为程序化的编程风格,如果没有半冒号,它是一种纯粹的函数式语言。

        2
  •  2
  •   1737973    6 年前

    不知道 let 在FFL之前,一定很少见。

    不管细节如何,分号必须是绝对必要的,以便在使用绑定变量之前强制执行。换句话说,在使用分号之前,变量不会 存在 . 没有绑定值。

    这与 where 不需要分号。

    鉴于分号不是完全初学者的构造,我可以向初学者推荐一些关于变量的内容。 哪里 直到理解分号的诡计。

    推荐文章