Clojure宏编程与性能分析全解析
1. 编写第一个Clojure宏
现在我们来深入Clojure宏的世界。先看一个挑战:在Clojure里编写一个 unless 功能的函数。先尝试以下代码:
(def a 150)
(defn my-if [cond positive negative]
(if cond
positive
negative))
(my-if (> a 200)
(println "Bigger than 200")
(println "Smaller than 200"))
运行这段代码,会得到如下输出:
Bigger than 200
Smaller than 200
Nil
这是怎么回事呢?在函数传递参数时,所有参数会在函数体执行之前被求值,所以这里在函数体执行前,两个 println 方法都被执行了。
为了搞清楚情况,修改代码让它返回一个值:
(def a 500)
(my-if (> a 200)
(do
(println "Bigger than 200")
:bigger)
(do
(println "Smaller than 200")
:smaller))
输出结果为:
Bigg
超级会员免费看
订阅专栏 解锁全文
75

被折叠的 条评论
为什么被折叠?



