即使找了密切的Clojure的文档,我看不出有任何直接确认为Clojure中是否支持运算符重载。
如果是这样,可能有人为我提供的如何重载快速snipplet,让我们说的“+”操作符来委托我们可以调用一些预定义的方法myPlus
。
我是很新的Clojure的,所以这里的人的帮助将不胜感激。
即使找了密切的Clojure的文档,我看不出有任何直接确认为Clojure中是否支持运算符重载。
如果是这样,可能有人为我提供的如何重载快速snipplet,让我们说的“+”操作符来委托我们可以调用一些预定义的方法myPlus
。
我是很新的Clojure的,所以这里的人的帮助将不胜感激。
Clojure的(如任何Lisp的)运营商是纯功能; 你可以定义“操作员”之类的函数:
(defn ** [x y] (Math/pow x y))
的“+”操作符(和其他一些数学运算符)是Clojure中一个特殊的情况下,由于内联(对于二进制的情况下,至少)。 您可以在一定程度上指的不是避免这种clojure.core
(或排除clojure.core/+
)在您的命名空间,但是这可能是非常有毛。
要创造一个+被重新定义命名空间:
(ns my-ns
(:refer-clojure :exclude [+]))
(defn + [x y] (println x y))
(+ "look" "ma")
一个很好的策略很可能是使你+一个多方法,并调用核心的+功能的数字情况。
看看这个: http://clojure.org/multimethods
某些功能,如+是核心,不能重新定义。
你可以做一个新的功能,并将其命名为“+”或‘!+’为例,这是在可读性方面是相似的。
使用在多方法URL的信息上面包含的,您可以构建告诉你的函数。+使用哪一个实现。