最近在看 <clojure 编程> 这本书,在使用 `Ring` 时,#’app 这样的写法时什么意思?



 clojure


 
;; 定义 ring 的处理函数 (defn app [{:keys [uri]}] ... ;省略具体代码 ;; 在调用时 (def server (run-jetty #'app {:port 8080 :join? false}))

请问,爱调用处理函数时的 #'app 这样的写法时什么意思呢?
我试过直接写 app 也可以成功启动 jetty

clojure ring

萝拉·斯图亚特 10 years, 7 months ago

#' 代表 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 上所附着的元数据和它指向的内容是不同的。
离人过客暗凄凉 answered 10 years, 7 months ago

Your Answer