14

REPL で、slime の clojure.contrib.trace 名前空間の関数を使用したいと考えています。スライムにそれらを自動的にロードさせるにはどうすればよいですか? 関連する質問ですが、実行中の 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"]])

すべてが最新のようです。つまり、'lein deps' は何の変更も加えていません。元気?

4

1 に答える 1

18
  1. :require指定された名前空間から Vars を取得せず、名前空間自体を使用可能にするだけであるため、「シンボルを解決できません」という例外が発生します。

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

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

    フォームの および 句には、 のおよび関数に:require対応するものがあります。とに対応するマクロもあります。:use:refernsrequireusereferclojure.core:refer-clojure:import

    つまりclojure.contrib.trace、REPL で利用可能にするために、(require 'clojure.contrib.trace)またはのようなことを行うことができます(require '[clojure.contrib.trace :as trace])requireは関数であるため、ライブラリ仕様を引用する必要があることに注意してください。(useまたrefer、引用された lib 仕様を使用します。importまたrefer-clojure、引用は必要ありません。)

    Clojure REPL を起動するたびに特定の名前空間を利用できるようにする最も簡単な方法 (SLIME を使用する場合を含む) は、適切なrequire呼び出しを に配置すること~/.clojure/user.cljです。すべての contribをプルするために何を入れることができるかについての説明は、John Lawrence Aspden による Requiring all possible namespacesブログ投稿を参照してください(個人的には、そこにはありますが、これは行いません)。user.clj(use 'clojure.contrib.repl-utils)

于 2010-05-18T05:27:42.753 に答える