2010-05-18 2 views
14

REPL에서 slime의 clojure.contrib.trace 네임 스페이스에있는 함수를 사용하고 싶습니다. 어떻게 슬라임을 자동으로로드 할 수 있습니까? 관련 질문, 실행중인 repl에 특정 네임 스페이스를 추가하려면 어떻게해야합니까? clojure.contrib의 API에slime에서 clojure.contrib 함수 사용 REPL

는이 같은 사용법을 설명 :

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

그러나 어떠한 기능에 대해 "기호를 확인할 수 없습니다"오류와 함께로드 할 수있는 파일에 내 코드 결과이 추가 추적 네임 스페이스.

은 내가 ServerSocket의를 시작합니다 leiningen 'lein 허풍'를 사용하고이

(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', 최신 것 같은 project.clj 파일을 찾습니다. 무슨 일이야? 당신이 얻고있는

+1

미칼의 답을 정확하다고 표시하고 싶을 수 있습니다. –

+1

타일러, 당신의 문제를 해결 한 것 같으므로 미칼의 대답을이 질문에 대한 대답으로 받아 들여야합니다. 이 작업을 수행하는 것이 좋은 형태 일뿐만 아니라 평판 점수를 조금 높일 수 있습니다.질문 점수 근처의 체크 표시를 클릭하기 만하면됩니다. –

답변

18
  1. :require 지정된 네임 스페이스에서 모든 바르에서 잡아 당기지 않기 때문에 예외 "기호를 확인할 수 없습니다", 그것은 단지 네임 스페이스 자체는 사용할 수 있습니다.

    따라서 당신이 당신의 ns 형태로 (:require foo.bar), 네임 스페이스 foo.bar에서 바르 quux에 액세스 할 수 foo.bar/quux를 작성해야합니다. (:require [foo.bar :as fb])을 사용하여 fb/quux으로 줄일 수도 있습니다. 최종 가능성은 대신 (:use foo.bar)이라고 쓰는 것입니다. 당신의 네임 스페이스에서 모든 Vars를 foo.bar에서 사용할 수 있습니다. 일반적으로 외부 라이브러리 :use에 나쁜 스타일로 간주됩니다. 하나의 프로젝트 안에서는 괜찮을 것입니다.

  2. 재 : 자동 REPL에서 물건을 사용할 수 있도록 : ns 형태의

    :require, :use:refer 조항이 clojure.corerequire, userefer 기능에 대응 있습니다. :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에 넣을 내용에 대한 설명은 John Lawrence Aspden의 Requiring all possible namespaces 블로그 게시물을 참조하십시오. 전체 (내가 개인적으로 수행하지는 않지만, (use 'clojure.contrib.repl-utils)이 있음).

+0

고마워요! Emacs에서 디버깅하는 것이 훨씬 쉽습니다. – Limpoch