引用clojure时出错.核心/ /(分裂)



在一些clojure代码中,我想从clojure中引用除法函数"/"。使用别名命名空间的核心。这是因为我想为一些数学函数编写自定义实现,而内部仍然使用核心函数。

(ns mynamespace
  (:refer-clojure :exclude [ / ])
  (:require [clojure.core :as core])
(defn / [x y]
  (core// x y))
但是,这会导致错误:"Invalid token: core//"

其他数学函数也是这样工作的(core/+ core/*)。

如何引用核心除法函数?

如果您使用全名clojure,似乎可以工作。Core//在clojure 1.5

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

最新更新