ClojureScript 将一个命名空间拆分为多个文件
ClojureScript split one namespace into multiple files
我读过this thread,但ClojureScript 中似乎没有load
和load-file
。是否可以将单个名称空间分隔为多个文件?
我想这样做的原因是因为我正在使用 Om 并且我想将组件分成不同的文件。我可以使用单独的命名空间来做到这一点,但是我将不得不在每个文件的开头编写相同的要求,而且在主文件中调用这些组件的唯一方法是这样的:
(:require [some-project.sidebar :as sidebar])
...
(om/build sidebar/sidebar app-state)
即我必须在每个组件的名称之前指定名称空间,这看起来不太漂亮。关于如何改进它的任何想法?我是 Clojure 和 ClojureScript 的新手,所以我可能遗漏了一些明显的东西?
这里有几点需要注意
- 您可以在 :require 中使用 :refer 将不合格的变量导入命名空间。如果有几个,这没关系,但如果你试图对所有事情都这样做,很快就会变得笨拙。
- Clojure 应用程序通常以树状结构构建,其中主名称空间需要子名称空间等,因此您不必将相同的名称空间导入每个名称空间。
- 即使可以跨多个文件拆分命名空间,它也不是惯用的 Clojure。一个文件 = 一个命名空间是常态。
- 如果需要,您可以将 vars 从一个命名空间定义到另一个命名空间,从而使一个 'master' 命名空间在您的其他命名空间中使用。
- 如果您想最大程度地减少必须执行的导入次数,请减少命名空间并增大它们。
我读过this thread,但ClojureScript 中似乎没有load
和load-file
。是否可以将单个名称空间分隔为多个文件?
我想这样做的原因是因为我正在使用 Om 并且我想将组件分成不同的文件。我可以使用单独的命名空间来做到这一点,但是我将不得不在每个文件的开头编写相同的要求,而且在主文件中调用这些组件的唯一方法是这样的:
(:require [some-project.sidebar :as sidebar])
...
(om/build sidebar/sidebar app-state)
即我必须在每个组件的名称之前指定名称空间,这看起来不太漂亮。关于如何改进它的任何想法?我是 Clojure 和 ClojureScript 的新手,所以我可能遗漏了一些明显的东西?
这里有几点需要注意
- 您可以在 :require 中使用 :refer 将不合格的变量导入命名空间。如果有几个,这没关系,但如果你试图对所有事情都这样做,很快就会变得笨拙。
- Clojure 应用程序通常以树状结构构建,其中主名称空间需要子名称空间等,因此您不必将相同的名称空间导入每个名称空间。
- 即使可以跨多个文件拆分命名空间,它也不是惯用的 Clojure。一个文件 = 一个命名空间是常态。
- 如果需要,您可以将 vars 从一个命名空间定义到另一个命名空间,从而使一个 'master' 命名空间在您的其他命名空间中使用。
- 如果您想最大程度地减少必须执行的导入次数,请减少命名空间并增大它们。