Clojure ^在命名空间中共享
Clojure ^shared in namespace
我正在关注 pedestal tutorial,我注意到代码中的 ^shared
注释,如下所示:
(ns ^:shared tutorial-client.behavior
(:require [clojure.string :as string]
[io.pedestal.app.messages :as msg]))
它有什么用?
它表示代码应该编译为 clojure,以便在服务器端使用,也应该编译为 clojurescript,以便在浏览器中使用。
When compilation occurs, any Clojure namespaces marked :shared will
also be compiled to ClojureScript.
(ns ^:shared tutorial-client.behavior
(:require [clojure.string :as string]
[io.pedestal.app.messages :as msg]))
For now, these files must contain the common subset of Clojure and
ClojureScript. A new feature of Clojure 1.6, feature expressions, will
allow us to break free from this restriction.
^shared 注释用于指示 ClojureScript 编译器编译此 .clj 文件,它通常会忽略它。这使您可以在客户端和服务器上编写 运行 的共享代码(只要它不使用特定于平台的代码)。这是在 cljx 和 cljc 文件之前,AFAIK 特定于 Pedestal 构建过程,而不是 vanilla ClojureScript 的一部分。
支持的编写平台特定代码的方法是使用 Reader 条件语句,这是 Clojure 1.7 中的新功能。
附带说明一下,Pedestal App 实际上已弃用,Pedestal Server 仍在维护中。
我正在关注 pedestal tutorial,我注意到代码中的 ^shared
注释,如下所示:
(ns ^:shared tutorial-client.behavior
(:require [clojure.string :as string]
[io.pedestal.app.messages :as msg]))
它有什么用?
它表示代码应该编译为 clojure,以便在服务器端使用,也应该编译为 clojurescript,以便在浏览器中使用。
When compilation occurs, any Clojure namespaces marked :shared will also be compiled to ClojureScript.
(ns ^:shared tutorial-client.behavior (:require [clojure.string :as string] [io.pedestal.app.messages :as msg]))
For now, these files must contain the common subset of Clojure and ClojureScript. A new feature of Clojure 1.6, feature expressions, will allow us to break free from this restriction.
^shared 注释用于指示 ClojureScript 编译器编译此 .clj 文件,它通常会忽略它。这使您可以在客户端和服务器上编写 运行 的共享代码(只要它不使用特定于平台的代码)。这是在 cljx 和 cljc 文件之前,AFAIK 特定于 Pedestal 构建过程,而不是 vanilla ClojureScript 的一部分。
支持的编写平台特定代码的方法是使用 Reader 条件语句,这是 Clojure 1.7 中的新功能。
附带说明一下,Pedestal App 实际上已弃用,Pedestal Server 仍在维护中。