Clojure中的运算符重载(Operator Overloading in Clojure)

2019-07-21 09:25发布

即使找了密切的Clojure的文档,我看不出有任何直接确认为Clojure中是否支持运算符重载。

如果是这样,可能有人为我提供的如何重载快速snipplet,让我们说的“+”操作符来委托我们可以调用一些预定义的方法myPlus

我是新的Clojure的,所以这里的人的帮助将不胜感激。

Answer 1:

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")

一个很好的策略很可能是使你+一个多方法,并调用核心的+功能的数字情况。



Answer 2:

看看这个: http://clojure.org/multimethods

某些功能,如+是核心,不能重新定义。

你可以做一个新的功能,并将其命名为“+”或‘!+’为例,这是在可读性方面是相似的。

使用在多方法URL的信息上面包含的,您可以构建告诉你的函数。+使用哪一个实现。



文章来源: Operator Overloading in Clojure