Clojure中,#'是什么意思?

6

我正在跟随这个教程构建一个Clojure后端,但我对Clojure并不是很熟悉。

教程提供了这个源文件。

(ns shouter.web
  (:require [compojure.core :refer [defroutes GET]]
            [ring.adapter.jetty :as ring]))

(defroutes routes
  (GET "/" [] "<h2>Hello World</h2>"))

(defn -main []
  (ring/run-jetty #'routes {:port 8080 :join? false}))

“#”符号到底代表什么?我知道它以某种方式获取了“routes”的值,但为什么不能直接说

(ring/run-jetty routes {:port 8080 :join? false}))
< p >“#”是针对特定环境的语法吗?我在这方面找不到好的资源。


2
请参见https://dev59.com/g2gu5IYBdhLWcg3w9ruX - MicSokoli
1个回答

7

#'sym会扩展为(var sym)

变量可以与绑定到它的函数互换使用。但是,调用变量会动态解析已定义的函数,然后调用它。

在这种情况下,它用于开发目的:不是通过值传递处理程序函数routes,而是传递绑定到它的变量,以便在更改和重新评估shouter.web/routes之后无需重新启动Jetty。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接