【问题标题】:keyword - FFL: Where vs. Let关键字 - FFL: Where vs. Let
【发布时间】:2018-10-31 14:37:13
【问题描述】:

我试图理解以下代码:

    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吗? (另外,可能还有另一个问题:为什么需要这些分号?)

【问题讨论】:

    标签: where-clause let anura ffl


    【解决方案1】:

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

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

    当分号出现时,分号之前的所有内容都被视为与分号之后的所有内容完全分开的公式。第一个公式被求值执行,然后第二个公式被求值和执行。

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

    【讨论】:

      【解决方案2】:

      在此之前从不知道FFL中的let,一定非常罕见。

      不管有什么见解,分号必须是绝对必要的,以便在使用绑定变量之前强制执行。换句话说,在使用分号之前,变量不存在。没有绑定值。

      这与不需要分号的where 有很大不同。

      鉴于分号不是完全适合初学者的结构,在了解分号的诡计之前,我可以向初学者推荐一些关于变量的变量坚持where

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多