单段命名空间有什么问题?

Joh*_*den 21 namespaces clojure

我已经在几个地方读过,在clojure中不鼓励使用单段命名空间.

事实上,我见过的几乎每个库都有(需要'lib.core)而不是(require'lib).

为什么?


编辑:我有点傻.对于单个段命名空间如何可能是坏事的简明示例,将给出额外的功劳.

Mar*_*nik 21

Java不鼓励使用默认包,因为您无法从任何其他包中引用其中的任何内容.如果预编译一段Clojure命名空间,您将在默认包中获得一个Java类.如果有人在任何时候想要使用来自Java的库,那么他将被这种无足轻重的人所阻止.由于没有充分的理由支持使用单段命名空间,并且有一个明确定义的原因没有,可以公平地说单段命名空间应该是Clojure中的劝阻.

  • 是的,这是Clojure根据命名空间自动定位.clj文件的惯例. (4认同)
  • 好吧,所以doom.clj - > doom.class但是(ns horror.doom)在恐怖/ doom.clj中去了包恐怖中的doom.class?我必须有子目录恐怖才能使用(ns horror.doom)? (3认同)

Joo*_*aat 7

单段命名空间与Java互操作有问题.有些事情可能以意想不到的方式破裂 另请参阅https://groups.google.com/forum/?fromgroups=#!topic/clojure/gOffhotk25Y

  • 在JVM上的Clojure,`(NS foo.bar)`结果**类酒吧*包*foo的,在棒定义为内部类条的功能.这意味着clojure中的"顶层"命名空间实际上是"无包"类,它们由JVM和/或Java专门处理(以某种可能的意外方式). (3认同)