Clojure宏编程:从基础到实践
1. 语法抽象与 -> 宏
在Clojure编程中,代码常常会包含大量嵌套的函数调用。例如,有如下函数:
(defn read-resource
"Read a resource into a string"
[path]
(read-string (slurp (clojure.java.io/resource path))))
要理解这个函数体,需要从最内层的 (clojure.java.io/resource path) 开始,从右向左逐步分析每个函数的结果如何传递给下一个函数。这种从右向左的执行顺序与非Lisp程序员的习惯相反。不过,随着对Clojure编程的熟悉,这类代码会变得容易理解。
为了能以更熟悉的从左到右、从上到下的方式阅读Clojure代码,可以使用内置的 -> 宏(也称为线程宏或“stabby”宏)。使用 -> 宏可以将上述函数重写为:
(defn read-resource
[path]
(-> path
clojure.java.io/resource
slurp
read-string))
可以将其看作一个从上到下的管道。首先, path 被传递给 io/r
超级会员免费看
订阅专栏 解锁全文
71

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



