即使仔细查看 Clojure 上的文档,我也没有看到任何关于 Clojure 是否支持运算符重载的直接确认。
如果确实如此,有人可以为我提供一个快速的片段,说明如何重载“+”运算符来委托(delegate)给我们可以调用的某个预定义方法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")
一个好的策略可能是使您的 + 成为多方法并针对数字情况调用核心的 + 函数。
关于functional-programming - Clojure 中的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1535176/