使用和:在ns宏中使用有什么区别

时间:2016-09-09 19:04:09

标签: clojure

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <encoding>${project.build.sourceEncoding}</encoding> <source>${java.version}</source> <target>${java.version}</target> <compilerVersion>${java.version}</compilerVersion> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> </plugins> </build> 宏中use:use之间的区别是什么?

Docs说以下内容:

ns

1 个答案:

答案 0 :(得分:1)

这有点令人困惑。

ns表单中,您希望使用关键字版本(:require ...),如:

(ns clj.core
  (:require [tupelo.core :as t] ))

您应该将此视为&#34; normal&#34;做事的方式。

另一个没有冒号的版本是一个同名的 功能 ,可以在REPL中调用,以防您不能或不# 39;我想使用ns表格。这看起来像是:

> lein repl
user=> (require '[tupelo.core :as t] )
nil
user=> (t/append [1 2 3] 4)
[1 2 3 4]

请注意: 对于repl / function版本,您还必须引用包含命名空间规范的向量。请注意,我们未使用ns引用:require版本中的规范。

作为替代方案,如果您已经在编辑器中并且只想在REPL上快速测试某些内容,则可以将整个ns表单从文件顶部剪切/粘贴到REPL中:

> lein repl
user=> (ns clj.core
  #_=>   (:require [tupelo.core :as t] ))
user=>

比手动输入函数版本更容易且更不容易出错。

有关概述,请参阅最近发布的博客:https://stuartsierra.com/2016/clojure-how-to-ns.html