2

我正在关注基座教程,我注意到^shared代码中的注释,如下所示:

(ns ^:shared tutorial-client.behavior
    (:require [clojure.string :as string]
              [io.pedestal.app.messages :as msg]))

它有什么用?

4

2 回答 2

2

^shared 注释用于指示 ClojureScript 编译器编译这个 .clj 文件,它通常会忽略它。这使您可以编写可以在客户端和服务器上运行的共享代码(只要它不使用特定于平台的代码)。这是在 cljx 和 cljc 文件之前,AFAIK 特定于 Pedestal 构建过程,而不是 vanilla ClojureScript 的一部分。

编写平台特定代码的受支持方法是使用读取器条件,这是 Clojure 1.7 中的新功能。

附带说明一下,Pedestal App 已被有效弃用,Pedestal Server 仍在维护中。

于 2015-07-12T01:15:15.580 回答
1

它表示代码应该被编译为 clojure 以供服务器端使用,也应编译为 clojurescript 以供在浏览器中使用。

基座维基

当编译发生时,任何标记为 :shared 的 Clojure 命名空间也将被编译为 ClojureScript。

(ns ^:shared tutorial-client.behavior
    (:require [clojure.string :as string]
              [io.pedestal.app.messages :as msg]))

目前,这些文件必须包含 Clojure 和 ClojureScript 的公共子集。Clojure 1.6 的一个新特性,特征表达式,将允许我们摆脱这个限制。

于 2015-07-12T01:13:42.937 回答