使用clojure.string会导致警告

vie*_*bel 8 clojure

使用clojure.string时,我收到以下警告

WARNING: replace already refers to: #'clojure.core/replace in namespace: tutorial.regexp, being replaced by: #'clojure.string/replace
WARNING: reverse already refers to: #'clojure.core/reverse in namespace: tutorial.regexp, being replaced by: #'clojure.string/reverse
Run Code Online (Sandbox Code Playgroud)

我的clojure脚本是:

(ns play-with-it
  (:use [clojure.string]))
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这些警告?

Mic*_*zyk 15

是的,切换到

(ns play-with-it
  (:require [clojure.string :as string]))
Run Code Online (Sandbox Code Playgroud)

然后说例如

(string/replace ...)
Run Code Online (Sandbox Code Playgroud)

打电话clojure.stringreplace功能.

使用:use,您可以将所有Vars clojure.string直接引入您的命名空间,并且由于其中一些Vars的名称与Vars冲突clojure.core,您会收到警告.然后你必须说clojure.core/replace要知道通常简单的叫什么replace.

名字的冲突是设计的; clojure.string是这样require的别名d.str并且string是最常选择的别名.


Ale*_*art 7

除了Michał的答案,你可以从clojure.core以下地方排除变种:

user=> (ns foo)
nil
foo=> (defn map [])
WARNING: map already refers to: #'clojure.core/map in namespace: foo, being replaced by: #'foo/map
#'foo/map
foo=> (ns bar
        (:refer-clojure :exclude [map]))
nil
bar=> (defn map [])
#'bar/map