【问题标题】:Are the square brackets in Clojure's defn, defmacro and binding really a vector?Clojure 的 defn、defmacro 和 binding 中的方括号真的是向量吗?
【发布时间】:2023-04-02 21:25:01
【问题描述】:

Clojure 的 defndefmacrobinding 中的参数周围的方括号是真的创建了一个向量还是只是语法问题,使参数从其他参数中脱颖而出?

我正在阅读 Clojure in Action,其中指出:

Clojure 使用向量来表示 函数参数或绑定形式。

这让我在这里问了这个问题。

【问题讨论】:

    标签: syntax vector clojure


    【解决方案1】:

    是的,它确实是一个向量。我们可以通过手动构建一个函数然后对其进行评估来看到这一点:

    (eval (list (list 'fn (vector 'x) (list '* 'x 2)) 100))
    ;=> 200
    

    希望对您有所帮助。

    【讨论】:

    • 虽然有一个问题(两年半之后......),为什么不接受这个问题? (defn foo (vector 'x'y) (+ x y))
    • defn 表单是一个宏,因此在对其进行检查时(宏扩展时间),尚未评估任何内容。因此,当它查看绑定表单时,它需要一个向量,但看到的是一个列表 (vector (quote x) (quote y))
    • 啊,我又被宏化了。 Tnx。
    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 2014-11-22
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2014-10-23
    相关资源
    最近更新 更多