如何防止clojure函数的参数评估?

(defn fun
  [& args]
  (println args))
(fun (+ 1 1) (+ 1 1))

我想让 fun 将要 ((+ 1 1) (+ 1 1)). 我知道引用表格会使其无法评价。但当我引用 args 如下:

(defn fun
  [& args]
  (println 'args))

输出是 args不过 我如何才能做到这一点?

解决方案:

Clojure和所有非懒惰的语言一样(几乎所有的语言都是这样),在调用函数之前,会对函数调用的参数进行评估。 当你调用:

(foo (+ 1 1) (+ 1 1))

首先会评估参数

(foo 2 2)

然后调用该函数,所以在你的 foo, args(2 2). 与产生这些值的表单没有联系。

如果你想防止评估,你需要引用 之前 评估,即在你的调用形式中。

(defn foo [& args]
  (println args))

(foo '(+ 1 1) '(+ 1 1))

给TA打赏
共{{data.count}}人
人已打赏
未分类

创建-反应-应用程序不能通过WebStorm工作。

2022-9-25 1:06:22

未分类

使用覆盖物限制特定的道路区域。

2022-9-25 1:06:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索