为什么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)
如果您要求名称是全局唯一的,为什么要使用名称空间?如果我定义冰淇淋库,并用冰淇淋为每个函数名称加前缀,那么任何人都不会发生冲突.
但这对双方来说都非常不方便 - 我们都必须一遍又一遍地输入这个愚蠢的前缀.如果不是icecream-scoop,我只是在命名空间icecream中命名我的函数scoop,你可以选择如何引用它:如果它从上下文中清楚并且不与你的命名空间冲突,你可以称之为scoop,或者icecream /勺子,或甜点/勺子,无论你需要什么,使它读得很好.
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |