2012-04-27 10 views

答えて

80

主なアイデアは、一つだけのオペレータを残し、:useを完全に取り除くことです他のパッケージをロードする。あなたは:use(:require [my.lib :refer :all])とエミュレートすることができます。

+0

私は ':refer'は':use'を取り除くことを許していますが、これがアイデアであったことを示す文書を教えてくれますか?私は個人的に、 ':use'は' clojure.test'のような特定の場合に便利だと思います。そのような場合に ':use'を使わないのはなぜですか? –

+10

http://dev.clojure.org/jira/browse/CLJ-879 clojure-devメーリングリストのディスカッションへのリンクを参照してください... –

24

はい、彼らは等価である、

:refer:requireは、名前空間を構築するために必要な基本的な操作です。 :useクラスは

  • :referをロードされます:requireよりconvienient

    • :use:refer + :require
    あるだけの地図(マップの実際のカップル)本当に名前空間に物事を追加しています

    多くの場合、名前空間に魔法はありません。

    この

    (ns so.example (:use my.lib)) 
    

    同等とのような名前空間を作る場合:必要になります::require:referを追加する

    (ns so.example (:require [my.lib :refer [function1 function2 function3 
                 list every function in example 
                 here and remember to keep it 
                 up to date ]])) 
    
  • +1

    なぜ::referが追加されたのですか? – Andrew

    +0

    とほぼ同名で使用されています:パッケージに短い名前を付けるために。ああ、それが最初に来た。参照:参照:使用しない:使用 –

    +0

    ':refer'が':require'に追加された理由はまだ分かりません。どんな問題がまだ解決されていないのですか? – Andrew

    0

    1.4.0リリースでは、もはや使用する必要はありません。 require:referを代わりに使用してください。 Clojure 1.4.0のchangelogから: "requireは今、:referオプションを取ることができます:。参照は名前空間から参照するシンボルのリストを取るか、または:allはすべての公開変数を持ち込む" (https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html

    関連する問題