clojure
;; 定义 ring 的处理函数 (defn app [{:keys [uri]}] ... ;省略具体代码 ;; 在调用时 (def server (run-jetty #'app {:port 8080 :join? false}))
请问,爱调用处理函数时的 #'app
这样的写法时什么意思呢?
我试过直接写 app
也可以成功启动jetty
。
#'
代表 var 本身。在 repl 中尝试下列代码:
clojure
(def a [3 1]) (class a) => clojure.lang.PersistentVector (class #'a) => clojure.lang.Var
大多数情况下,我们使用 var 是使用它的内容,但在你的例子中有下面重大区别:
- var 是可以被重新定义的。例如用
alter-var-root
可以重新定义 #'app 成为另一个函数。让 jetty 的 handler 可以在运行时改变。 - var 上所附着的元数据和它指向的内容是不同的。