Rya*_*chi 16 functional-programming operator-overloading clojure
即使仔细查看Clojure上的文档,我也没有看到任何关于Clojure 是否支持运算符重载的直接确认.
如果确实如此,有人可以向我提供如何超载的快速信息,比方说,"+"运算符委托我们可以调用的一些预定义方法myPlus.
我对Clojure 很新,所以非常感谢有人的帮助.
pmf*_*pmf 24
Clojure(就像任何Lisp的)运算符都是普通的函数; 你可以像函数一样定义一个"运算符":
(defn ** [x y] (Math/pow x y))
Run Code Online (Sandbox Code Playgroud)
"+"运算符(以及其他一些数学运算符)是Clojure中的一个特例,因为它是内联的(至少对于二进制情况).您可以在某种程度上通过不在您的命名空间中引用clojure.core(或排除clojure.core/+)来避免这种情况,但这可能非常多毛.
要创建一个名称空间,其中+被重新定义:
(ns my-ns
(:refer-clojure :exclude [+]))
(defn + [x y] (println x y))
(+ "look" "ma")
Run Code Online (Sandbox Code Playgroud)
一个好的策略可能是使你的+一个多方法并为数字案例调用核心的+函数.
看看这个:http: //clojure.org/multimethods
某些功能,如+是核心功能,无法重新定义.
您可以创建一个新函数,并将其称为".+"或"!+",这在可读性方面类似.
使用上面包含的multimethods URL中的信息,您可以构建一个函数来告诉您.+使用哪个实现.