2012-02-16 5 views
8

なり、私は次の警告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 

を受け取る私Clojureのスクリプトは次のとおりです。

(ns play-with-it 
    (:use [clojure.string])) 

は、これらの警告を修正する方法はありますか?

答えて

15

はい、

(ns play-with-it 
    (:require [clojure.string :as string])) 

に切り替え、その後、例えば言います

(string/replace ...) 

clojure.stringreplace関数を呼び出します。 :use

、あなたが直接あなたの名前空間にclojure.stringからすべてのバールに持参し、それらのいくつかはclojure.coreにバールと衝突名前を持っているので、あなたは警告が表示されます。そして、通常replaceと呼ばれるものを得るには、clojure.core/replaceと言う必要があります。

名前の衝突は仕様です。 clojure.stringは、このようなエイリアスを持つrequiredを意味します。 strおよびが最も頻繁に選択されるエイリアスです。ミハエルの答えに加えて

+0

ありがとうございました。 'require'と同様に、' clojure.core/refer'を使って各libの名前空間を参照することもできますか?この文ではどういう意味ですか? – viebel

+1

これは、 'use'が' require'とまったく同じことを意味し、 'refer'を使って' use'dという名前空間によってエクスポートされたものの現在の名前空間にマッピングを作成するように要求します。 (私は*すべてのVarsを[use'd名前空間から]あなたの名前空間*に直接持ち込む*と呼んでいます。)Cf。 '(doc参照)' –

+0

Clojureの喜びもこれらをかなりよく説明しています。 – Bill

7

、あなたはclojure.coreからVARSを除外することができます。

 
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 
4

あなたはまた、与えられた名前空間からあなたが望むだけVARSを参照することができアレックスの答えに加えて。

(ns foo.core 
    (:use [clojure.string :only (replace-first)])) 

replace-firstclojure.coreではないので、これは警告をスローしないでしょう。あなたは次のことをやった場合は、あなたはまだ警告が表示されます:

(ns foo.core 
    (:use [clojure.string :only (replace)])) 

一般的には、人々が(ns foo.bar (:require [foo.bar :as baz]))に向かって傾向にあるようです。この今:use上で推奨される

(ns play-with-it 
    (:require [clojure.string :refer [replace-first]])) 

1

のClojure 1.4ので、あなたが:refer:requireを使用して、名前空間から必要な個々の機能を参照することができます。

clojure.string/replaceまたはclojure.string/reverseを必要としないと仮定すると、警告も削除されます。

詳細については、this SO questionおよびthis JIRA issueを参照してください。

関連する問題