Clojure使用什么命名空间定义

托马斯·库里奇(Tomas Kulich)

根据规范,def应在当前ns(即* ns *)中内含var。但是,以下代码看起来并不像它:

(ns namespace-b)

(defn def_something []
  (ns namespace-a)
  (println *ns*) ;prints namespace-a as it should
  (def something 1)
) 

(def_something)

(println namespace-b/something) ; prints 1 
(println namespace-a/something) ; throws

我想念什么?

笔记:

  • defn仅用于说明目的。定义和运行匿名函数也可以正常工作。
  • 我知道使用def内部函数可能不是很习惯。但是,这只是我遇到的一个更大问题的本质。
xsc

解析器已经在编译时将var插入当前名称空间,尽管不会立即绑定它:

(defn dd [] (def x 0))
x ;; => #<Unbound Unbound: #'user/x>

相关的代码段可以发现这里,与第二参数来lookupVar触发上述实习为不存在的瓦尔这里

然后,解析将生成引用先前创建的var的表达式,因此表达式逻辑永远不会离开当前名称空间。

TL; DR: def是编译器以特殊方式处理的。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过未定义的命名空间访问clojure宏

来自分类Dev

为什么ADL无法与在命名空间之外定义的函数一起使用?

来自分类Dev

为什么ADL无法与在命名空间之外定义的函数一起使用?

来自分类Dev

使用Clojure core.typed强制重命名空间

来自分类Dev

Clojure List Leiningen命名空间

来自分类Dev

XML中命名空间根节点的意义是什么?在哪里定义这样的命名空间?

来自分类Dev

为什么C ++命名空间内的定义在命名空间外起作用?

来自分类Dev

ServiceContract 对命名空间的定义如何(为什么)影响功能

来自分类Dev

如何使用“使用命名空间”在命名空间中定义变量?

来自分类Dev

什么是命名空间污染?

来自分类Dev

无法在Clojure中使用命名空间clojure.data.zip.xml

来自分类Dev

当我使用dir([用户定义的对象])时,为什么它还返回对象的父类的命名空间中的名称?

来自分类Dev

为什么这个“from bar import *”会使用未在导入模块中定义的名称污染我的命名空间?

来自分类Dev

扩展在Clojure中另一个命名空间中定义的协议?

来自分类Dev

使用命名空间C ++的未定义引用

来自分类Dev

为什么在使用命名空间指令时没有命名空间用作函数?

来自分类Dev

在另一个Clojure命名空间中执行代码,为什么需要eval?

来自分类Dev

命名空间改变功能定义

来自分类Dev

命名空间函数的多重定义

来自分类Dev

在 VB 中定义命名空间

来自分类Dev

为什么这是对命名空间的不正确使用?

来自分类Dev

PHP命名空间,为什么仍使用后缀?

来自分类Dev

为什么要使用命名空间(PHP)

来自分类Dev

Clojure ^在命名空间中共享

来自分类Dev

使用“多个”命名空间

来自分类Dev

如何在命名空间的Clojure和未绑定变量中使用正向声明

来自分类Dev

如何使用与继承的祖先的命名空间匹配的显式定义的命名空间来序列化XML?

来自分类Dev

Clojure:Timbre和clojure.test命名空间

来自分类Dev

未命名命名空间中“使用命名空间”的范围

Related 相关文章

  1. 1

    通过未定义的命名空间访问clojure宏

  2. 2

    为什么ADL无法与在命名空间之外定义的函数一起使用?

  3. 3

    为什么ADL无法与在命名空间之外定义的函数一起使用?

  4. 4

    使用Clojure core.typed强制重命名空间

  5. 5

    Clojure List Leiningen命名空间

  6. 6

    XML中命名空间根节点的意义是什么?在哪里定义这样的命名空间?

  7. 7

    为什么C ++命名空间内的定义在命名空间外起作用?

  8. 8

    ServiceContract 对命名空间的定义如何(为什么)影响功能

  9. 9

    如何使用“使用命名空间”在命名空间中定义变量?

  10. 10

    什么是命名空间污染?

  11. 11

    无法在Clojure中使用命名空间clojure.data.zip.xml

  12. 12

    当我使用dir([用户定义的对象])时,为什么它还返回对象的父类的命名空间中的名称?

  13. 13

    为什么这个“from bar import *”会使用未在导入模块中定义的名称污染我的命名空间?

  14. 14

    扩展在Clojure中另一个命名空间中定义的协议?

  15. 15

    使用命名空间C ++的未定义引用

  16. 16

    为什么在使用命名空间指令时没有命名空间用作函数?

  17. 17

    在另一个Clojure命名空间中执行代码,为什么需要eval?

  18. 18

    命名空间改变功能定义

  19. 19

    命名空间函数的多重定义

  20. 20

    在 VB 中定义命名空间

  21. 21

    为什么这是对命名空间的不正确使用?

  22. 22

    PHP命名空间,为什么仍使用后缀?

  23. 23

    为什么要使用命名空间(PHP)

  24. 24

    Clojure ^在命名空间中共享

  25. 25

    使用“多个”命名空间

  26. 26

    如何在命名空间的Clojure和未绑定变量中使用正向声明

  27. 27

    如何使用与继承的祖先的命名空间匹配的显式定义的命名空间来序列化XML?

  28. 28

    Clojure:Timbre和clojure.test命名空间

  29. 29

    未命名命名空间中“使用命名空间”的范围

热门标签

归档