2015-07-12 73 views
2

我下面的pedestal tutorial共享,我注意到了^shared注释中的代码,如下图所示:Clojure的^命名空间

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

这是什么有用?

回答

2

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

支持编写特定平台代码的方法是使用Reader Conditionals,Clojure 1.7中的新增功能。

作为一个附注,Pedestal App被有效地弃用,Pedestal Server仍然被维护。

1

它表示应该将代码编译为clojure,用于服务器端,以及用作浏览器中的clojurescript。

pedestal wiki

当编译发生时,任何的Clojure命名空间标明:共享将 也被编译成ClojureScript。

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

现在,这些文件必须包含的Clojure的公共子集和 ClojureScript。 Clojure 1.6的一个新功能是功能表达式, 可以让我们摆脱这个限制。