作为一个附带项目,我正在创建一个用于图像合成 ( clisk ) 的 Clojure DSL。
我有点不确定函数命名的最佳方法,其中我在 DSL 中的函数类似于 Clojure 核心中的函数,例如+
,我的 DSL 中需要函数或类似的东西来附加地组合图像/执行矢量数学运算.
据我所知,有几个选择:
+
在我自己的命名空间中使用相同的名称 ( )。在 DSL 代码中看起来不错,但会覆盖 clojure.core 版本,这可能会导致问题。人们可能会感到困惑。- 使用相同的名称,但需要对其进行限定 (
my-ns/+
)。避免冲突,但use
为了方便起见阻止人们访问命名空间,看起来有点难看。 - 使用不同的短名称,例如 (
v+
)。可以很use
容易地避免冲突,但这个名字有点难看,可能很难记住。 - 使用不同的长名称,例如 (
vector-add
)。详细但具有描述性,没有冲突。 - 使用多方法排除
clojure.core/+
和重新定义+
(如 georgek 建议的那样)。
示例代码可能类似于:
(show (v+ [0.9 0.6 0.3]
(dot [0.2 0.2 0]
(vgradient (vseamless 1.0 plasma) ))))
最好/最惯用的方法是什么?