为什么clojure库不会尝试为常用函数名使用唯一名称

Afd*_*dsf 8 space clojure

为什么clojure库重用常用的函数名强迫你使命名空间限定它们?例如,clojure.zip使用next,替换和删除clojure核心中已经存在的,并且clojure.string中已经存在"replace".

现在开发人员可能会使用clojure.zip命名空间的一些缩写,因此在一个开发人员的代码中,clojure.zip/next将在另一个人的代码中被命名为z/next,如下所示,等等.这将迫使你回过头来看看名称空间缩写究竟是什么,因为开发人员可以创建自己的库,它也使用"下一个"功能

为什么不拉链,拉链替换,拉链删除,str替换?或类似的东西

然后在人们的代码中将存在一致的"名称空间限定",并且将清楚这些函数所指的是什么.

这并不像图书馆之间存在名称冲突的趋势.我通常只看到两三个.是否难以明确地将这些名称作为图书馆的独特之处?

Art*_*ldt 20

一般来说,使用use包含库比使用require普通的clojure代码更不受欢迎,因此当名称空间已经传达相同的含义时,使用更长的唯一名称就不那么有用了,因此clojure程序员往往更喜欢简洁性和唯一性.

代替:

(use 'liba 'libb)

(liba-foo 1 2 3)
(libb-foo 1 2 2)
Run Code Online (Sandbox Code Playgroud)

然后人们可以写:

(require ['liba :as 'a] [libb :as 'b] )

(a/liba-foo 1 2 3)
(b/libb-foo 1 2 3)
Run Code Online (Sandbox Code Playgroud)

这使得liba-看起来很傻,因此:

(a/foo 1 2 3)
(b/foo 1 2 3)
Run Code Online (Sandbox Code Playgroud)


ama*_*loy 9

如果您要求名称是全局唯一的,为什么要使用名称空间?如果我定义冰淇淋库,并用冰淇淋为每个函数名称加前缀,那么任何人都不会发生冲突.

但这对双方来说都非常不方便 - 我们都必须一遍又一遍地输入这个愚蠢的前缀.如果不是icecream-scoop,我只是在命名空间icecream中命名我的函数scoop,你可以选择如何引用它:如果它从上下文中清楚并且不与你的命名空间冲突,你可以称之为scoop,或者icecream /勺子,或甜点/勺子,无论你需要什么,使它读得很好.