【问题标题】:What is the difference between these type hinting forms and why is when implemented as an if statement?这些类型提示形式之间有什么区别,为什么作为 if 语句实现?
【发布时间】:2018-02-01 07:26:21
【问题描述】:

我是clojure的新手,所以我想知道一些事情

有两种方法可以输入代码,我想知道其中的区别

^String and others using #^String

当我看到 when 的代码时,我有点失望,这是一个 if 如果那不是真的可以解释我为什么(assertwhenthrow)

(defmacro when
  "Evaluates test. If logical true, evaluates body in an implicit do."
  {:added "1.0"}
  [test & body]
  (list 'if test (cons 'do body)))

【问题讨论】:

    标签: clojure


    【解决方案1】:
    1. #^ is the old, deprecated syntax. 现在继续使用^,除非您运行的是非常旧的 Clojure 版本(1.2 之前)。

    2. 为什么要失望?这是 Clojure 等语言之美的一部分! when 只是根据 if 定义的。它看起来像一个语言结构,但它实际上只是一个任何人都可以编写的宏。 when 在编译时实际上变成了 ifdo。当完全可以根据现有形式定义 when 时,这可能会使语言复杂化。

      when 的目的是在条件成立时执行副作用,否则不执行任何操作。它只是一个可读性助手。它类似于if-notwhen-not 宏,它们的条件被否定后变成ifs。无论如何,它们都不是必需的,但它们肯定有助于清理代码。

    【讨论】:

    • 我不知道新的#^Hint 方式。您有更改的链接吗?
    • @nha #^ 是旧的,已弃用的方式。我能找到的最好的参考是这个答案的底部:stackoverflow.com/a/3018911/3000206。 2 年前我开始使用 Clojure 时,#^ 已经被弃用,所以我从未使用过。
    • @nha Nvm,找到另一个参考。更新了答案。
    • @RafaelCustódio Np。很高兴能提供帮助。
    • 不是主题的重点,我是funcional的新手,clojure是飞行员,我爱上了它,太棒了!!! (不是这样,但 ir 非常快)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多