为什么clojure库重用经常出现的函数名,迫使您对它们进行命名空间限定?例如,clojure.zip使用了next、replace和remove,它们已经存在于clojure core中,并且"replace“已经存在于clojure.string中。
现在开发人员可能会使用clojure.zip名称空间的缩写,因此在一个开发人员的代码中,clojure.zip/next将被限定为z/next,在另一个人的代码中为w/next,等等。这将迫使您回头看看名称空间缩写实际上是什么,因为开发人员可能已经创建了自己的库,该库也使用了函数"next“。
为什么不使用zip-next、zip-replace和zip-remove、str-replace呢?或者类似的东西
然后,在人们的代码中将有一个一致的“命名空间限定”,并且这些函数所指的内容将变得清晰。
这并不像是库之间有大量的名称冲突。我通常只看到两三个。显式地使这些名称对于库来说是唯一的,真的有那么难吗?
发布于 2012-06-15 02:59:51
如果您要要求名称是全局唯一的,为什么还要有名称空间?如果我定义了icecream库,并在每个函数名前加上了icecream,那么任何人都不会发生冲突。
但这对双方都非常不方便--我们都必须一遍又一遍地输入这个愚蠢的前缀。如果不是icecream- scoop,而是我只是将我的函数命名为icecream,您可以选择如何引用它:如果它从上下文中清晰且不与您的命名空间冲突,您可以将其命名为scoop,或者icecream/scoop,或者dessert/scoop,任何您需要让它读起来更好的东西。
https://stackoverflow.com/questions/11037970
复制相似问题