function - Clojure 中的导入调用有什么区别?

标签 function import clojure difference

Clojure 中的以下导入语句似乎都是有效的:

(import '(com.example.db.modules DBModule))
(import 'com.example.db.modules.DBModule)
(import '[com.example.db.modules DBModule])
(import (com.example.db.modules DBModule))
(import com.example.db.modules.DBModule)
(import [com.example.db.modules DBModule])

但是它们有什么区别,为什么我应该使用其中之一? (特别是在一个导入语句中导入多个类时)

最佳答案

导入removes the quote of each expression如果有的话,那么引用它收到的参数与不引用它们之间没有区别。这意味着表达式 (import 'com.example.db.modules.DBModule))(import com.example.db.modules.DBModule) 是等效的。您可以通过宏扩展每个表达式来检查这一点。

user=> (macroexpand-1 '(import 'com.example.db.modules.DBModule))
(do (clojure.core/import* "com.example.db.modules.DBModule"))
user=> (macroexpand-1 '(import com.example.db.modules.DBModule))
(do (clojure.core/import* "com.example.db.modules.DBModule"))

指定向量或列表允许您从同一命名空间导入多个类,使用任一类都是等效的,因为import利用Clojure的序列抽象来map 并对其进行reduce

总结一下:

  • 当您只需要命名空间中的单个类时,请使用(import com.example.db.modules.DBModule)
  • 在需要时使用 (import [com.example.db.modules DBModule])(import (com.example.db.modules DBModule))导入多个类。我个人更喜欢向量。
  • 您可以提供上述项目的任意组合作为导入的参数。例如(import com.example.db.modules.DBModule [com.example.model 客户订单付款]))
  • 不要引用参数,因为没有必要。

关于function - Clojure 中的导入调用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069871/

相关文章:

pdf - 从 PDF 导入 Sql Server Reporting Services 2005 报告

java - 快速图形库

javascript - 如何使用javascript计算下一个修订号

python - F2PY 找不到模块

r - 我该如何编写这个函数 x^.3*(1-x)^.7

python - 如何将 os 变量导入 PYTHON 并更新它?

java - Java 与 Clojure 的良好并发示例

clojure - 为什么 Clojure 在执行计算后挂起?

PHP - 使用内置函数编写自己的函数 VS

c++ - 编译器不能跳下来找到被调用函数的定义吗?