3

在某些 clojure 代码中,我想使用别名命名空间来引用 clojure.core 中的除法函数“/”。这是因为我想为一些数学函数编写我的自定义实现,同时在内部仍然使用核心函数。

(ns mynamespace
  (:refer-clojure :exclude [ / ])
  (:require [clojure.core :as core])

(defn / [x y]
  (core// x y))

但是,这会导致错误:“无效令牌:核心//”

其他数学函数确实以这种方式工作(core/+ core/*)。

如何参考核心除法功能?

4

2 回答 2

1
user=> (defn / [& args] :arg-slash-ye-matey!)
WARNING: / already refers to: #'clojure.core// in namespace: user, 
being replaced by: #'user//
#'user//

user=> (/ 42 6)
:arg-slash-ye-matey!

user=>  ((ns-resolve 'clojure.core '/) 42 6)
7
于 2013-03-22T20:52:41.987 回答
1

如果您在 clojure 1.5 中使用全名 clojure.core// 似乎可以工作

user> (defn / [& args] (apply clojure.core// args))                                                                                                                       
WARNING: / already refers to: #'clojure.core// in namespace: user, being replaced by: #'user//

user> (/ 2 4) 
1/2 
于 2013-03-22T20:54:35.517 回答