Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 什么';单段名称空间有什么问题?_Clojure_Namespaces - Fatal编程技术网

Clojure 什么';单段名称空间有什么问题?

Clojure 什么';单段名称空间有什么问题?,clojure,namespaces,Clojure,Namespaces,我在几个地方读到过,clojure不鼓励使用单段名称空间 事实上,我见过的几乎每个库都有(require'lib.core)而不是(require'lib) 为什么? 编辑:我有点笨。我们将提供一个简单的示例,说明单段名称空间可能是一件坏事。单段名称空间在Java互操作方面存在问题。有些事情可能会以意想不到的方式发生。另请参见Java不鼓励使用默认包,因为您不能从任何其他包引用其中的任何内容。如果预编译一个单段Clojure名称空间,则会在默认包中获得一个Java类。如果任何人在任何时候都想从

我在几个地方读到过,clojure不鼓励使用单段名称空间

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

为什么?



编辑:我有点笨。我们将提供一个简单的示例,说明单段名称空间可能是一件坏事。

单段名称空间在Java互操作方面存在问题。有些事情可能会以意想不到的方式发生。另请参见

Java不鼓励使用默认包,因为您不能从任何其他包引用其中的任何内容。如果预编译一个单段Clojure名称空间,则会在默认包中获得一个Java类。如果任何人在任何时候都想从Java使用您的库,他将被这个琐事所阻止。由于没有充分的理由支持使用单段名称空间,而且有一个定义明确的理由不支持使用单段名称空间,因此可以公平地说,单段名称空间在Clojure中应该是一种不鼓励的做法。

我读到了这一点,但我仍然不确定到底发生了什么。我能翻译的最好的说法是“clojure中出现了一些令人厌恶的java流产,但不清楚它到底是怎么坏的。”无论如何,谢谢。在JVM上的clojure中,
(ns foo.bar)
会在包foo中生成类bar,其中的函数在bar中定义为bar的内部类。这意味着clojure中的“顶级”名称空间实际上是“无包”类,由JVM和/或Java.ok专门(以一些可能意外的方式)处理,所以doom.clj->doom.class,但是horror/doom.clj中的(ns horror.doom)转到package horror中的doom.class?为了使用(ns horror.doom),我必须有子目录horror?是的,这是Clojure根据名称空间自动定位.clj文件的惯例。>因为没有充分的理由支持使用单段名称空间,所以如果我们讨论的是“应该是”的话,简单对我来说似乎是一个足够好的理由与目前技术上可能的情况相反。是的,但是如果你只是在和Clojure混日子,尝试一些东西,而且不在乎,我总是使用单段名称空间,这样就更方便了,不必创建目录布局。对于真正的项目,不要这样做,因为别人已经说过了。