質問

clojure.contrib.traceネームスペースで、clojure.contrib.traceの名前空間をREPLのスライムの機能を使用したい。スライムに自動的にロードするにはどうすればよいですか?関連する質問、特定の名前空間を実行中のREPLに追加するにはどうすればよいですか?

Clojure.Contrib APIでは、次のような使用について説明しています。

(ns my-namespace
  (:require clojure.contrib.trace))

ただし、これを私のコードに追加すると、ファイルが「シンボルを解決できない」エラーがトレース名空間の関数のエラーをロードできません。

Leiningen 'Lein Swank'を使用してServersocketを起動し、Project.cljファイルは次のようになります

 (defproject test-project "0.1.0"
   :description "Connect 4 Agent written in Clojure"
   :dependencies [[org.clojure/clojure "1.2.0-master-SNAPSHOT"]
                  [org.clojure/clojure-contrib "1.2.0-SNAPSHOT"]]
   :dev-dependencies [[leiningen/lein-swank "1.2.0-SNAPSHOT"]
                      [swank-clojure "1.2.0"]])

すべてが最新のように思えます、すなわち「レイン・デプス」は変化をもたらしません。元気?

役に立ちましたか?

解決

  1. あなたは「シンボルを解決できない」例外を取得しています :require 指定された名前空間からVARSを引き込むことはなく、名前空間自体のみを使用できるようにします。

    したがって、あなたの場合 (:require foo.bar) あなたの中で ns フォーム、あなたは書く必要があります foo.bar/quux varにアクセスします quux 名前空間から foo.bar. 。使用することもできます (:require [foo.bar :as fb]) それを短くすることができるように fb/quux. 。最後の可能性は、書くことです (:use foo.bar) 代わりは;それはすべてのVARをから作ります foo.bar 名前空間で利用できます。一般的に悪いスタイルと見なされていることに注意してください :use 外部ライブラリ;ただし、単一のプロジェクトではおそらく問題ありません。

  2. Re:REPLで自動的に利用可能なものを作成します:

    :require, :use:refer の条項 ns フォームにはカウンターパートがあります require, userefer 機能します clojure.core. 。に対応するマクロもあります :refer-clojure:import.

    それはそれを意味することを意味します clojure.contrib.trace REPLで利用できます (require 'clojure.contrib.trace) また (require '[clojure.contrib.trace :as trace]). 。なぜならその理由に注意してください require 関数です。ライブラリ仕様を引用する必要があります。 (userefer また、引用されたlibスペックも取得します。 importrefer-clojure 引用は必要ありません。)

    Clojure Replを起動するたびに特定の名前空間を利用できる最も簡単な方法(スライムでそれをするときを含む)は、適切なものを置くことです require 電話 ~/.clojure/user.clj. 。を参照してください すべての可能な名前空間が必要です ジョン・ローレンス・アスペンによるブログ投稿あなたが入れられるかもしれないものの説明について user.clj 引き込む すべて コントリブの(私がやらないこと、個人的には、私は持っていますが (use 'clojure.contrib.repl-utils) そこで)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top