为什么我们需要Clojure中的'in(require'[...]])?

追求

我看到我们不需要'with,(ns ...)因为ns是一个宏。但是,为什么我们需要“在” (require '[...])我以为Clojure的向量是避免'的一种好方法,但是现在我在这里看到了。

我们使用(require 'clojure.string)sorequire似乎是一个函数,但是当作为参数给定时,我们不引用向量。

在此处输入图片说明

未引用的错误消息也令人困惑。

米歇尔·博肯特(Michiel Borkent)

这是因为require是作为函数而不是宏实现的,因此需要带引号的libspec。一个未加引号的libspec将像这样评估:

user=> [clojure.set :as s]
CompilerException java.lang.ClassNotFoundException: clojure.set

从而产生一个错误。

但是,ns作为宏实现,并且可以完全控制是否或何时进一步评估其参数,因此您无需引用libspec。您可以查看ns的宏扩展,看看扩展它会发生什么:

user=> (use 'clojure.pprint)
nil
user=> (pprint (macroexpand '(ns foo (:require [clojure.set :as s]))))
(do
 (clojure.core/in-ns 'foo)
 (clojure.core/with-loading-context
  (clojure.core/refer 'clojure.core)
  (clojure.core/require '[clojure.set :as s]))
 (if
  (.equals 'foo 'clojure.core)
  nil
  (do
   (clojure.core/dosync
    (clojure.core/commute
     @#'clojure.core/*loaded-libs*
     clojure.core/conj
     'foo))
   nil)))
nil

如您所见,ns只需按原样使用libspec并在传递要求之前将其引用给您,因此您不必这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么某些组件需要“ require UIExplorerBlock”和“ require UIExplorerPage”?

来自分类Dev

为什么我们需要MapReduce中的“地图”部分?

来自分类Dev

为什么我们在MongoDB中需要created_at

来自分类Dev

为什么我们需要Python中的属性?

来自分类Dev

为什么我们需要Java中的Properties类?

来自分类Dev

为什么我们需要纯<?>在Java中?

来自分类Dev

为什么我们在Typescript中需要任何类型?

来自分类Dev

为什么我们需要Kubernetes中的服务帐户?

来自分类Dev

我们为什么需要容器?

来自分类Dev

为什么我们需要IO?

来自分类Dev

为什么我必须使用Backbone。$ = browserify中的require('jquery')

来自分类Dev

为什么我必须使用Backbone。$ = browserify中的require('jquery')

来自分类Dev

为什么我们在http响应消息中既需要状态代码又需要短语代码?

来自分类Dev

为什么我们在http响应消息中既需要状态代码又需要短语代码?

来自分类Dev

什么是BIOS,为什么我们需要它?

来自分类Dev

为什么我们在Groovy中需要@lazy属性,它的优点是什么?

来自分类Dev

为什么即使我的Rails引擎位于Gemfile中并配置了require_paths,我的Rails引擎仍需要我提出要求(不同于典型的gem)?

来自分类常见问题

为什么我们需要使用flatMap?

来自分类Dev

mongodb为什么我们需要getSisterDB

来自分类Dev

为什么我们需要Avro模式演变

来自分类Dev

为什么我们需要虚拟内存?

来自分类Dev

为什么我们需要在Linux上挂载?

来自分类Dev

为什么我们需要gevent.queue?

来自分类Dev

为什么我们需要创建CFC的实例?

来自分类Dev

为什么我们需要把*用作指针

来自分类Dev

为什么我们需要* .lib文件?

来自分类Dev

为什么我们需要分别编译和链接?

来自分类Dev

为什么我们需要隐式应用

来自分类Dev

为什么我们需要adsense来注册admob

Related 相关文章

  1. 1

    为什么某些组件需要“ require UIExplorerBlock”和“ require UIExplorerPage”?

  2. 2

    为什么我们需要MapReduce中的“地图”部分?

  3. 3

    为什么我们在MongoDB中需要created_at

  4. 4

    为什么我们需要Python中的属性?

  5. 5

    为什么我们需要Java中的Properties类?

  6. 6

    为什么我们需要纯<?>在Java中?

  7. 7

    为什么我们在Typescript中需要任何类型?

  8. 8

    为什么我们需要Kubernetes中的服务帐户?

  9. 9

    我们为什么需要容器?

  10. 10

    为什么我们需要IO?

  11. 11

    为什么我必须使用Backbone。$ = browserify中的require('jquery')

  12. 12

    为什么我必须使用Backbone。$ = browserify中的require('jquery')

  13. 13

    为什么我们在http响应消息中既需要状态代码又需要短语代码?

  14. 14

    为什么我们在http响应消息中既需要状态代码又需要短语代码?

  15. 15

    什么是BIOS,为什么我们需要它?

  16. 16

    为什么我们在Groovy中需要@lazy属性,它的优点是什么?

  17. 17

    为什么即使我的Rails引擎位于Gemfile中并配置了require_paths,我的Rails引擎仍需要我提出要求(不同于典型的gem)?

  18. 18

    为什么我们需要使用flatMap?

  19. 19

    mongodb为什么我们需要getSisterDB

  20. 20

    为什么我们需要Avro模式演变

  21. 21

    为什么我们需要虚拟内存?

  22. 22

    为什么我们需要在Linux上挂载?

  23. 23

    为什么我们需要gevent.queue?

  24. 24

    为什么我们需要创建CFC的实例?

  25. 25

    为什么我们需要把*用作指针

  26. 26

    为什么我们需要* .lib文件?

  27. 27

    为什么我们需要分别编译和链接?

  28. 28

    为什么我们需要隐式应用

  29. 29

    为什么我们需要adsense来注册admob

热门标签

归档