Domanda

Voglio utilizzare le funzioni nello spazio dei nomi clojure.contrib.trace nella melma al REPL. Come posso ottenere melma per caricare automaticamente? Una questione collegata, come posso aggiungere una specifica namespace in una repl in esecuzione?

Al API clojure.contrib che descrive l'utilizzo in questo modo:

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

Ma l'aggiunta di questo per i miei risultati di codice nel file di essere in grado di caricare con "Impossibile risolvere il simbolo" di errore per qualsiasi funzione dallo spazio dei nomi traccia.

Io uso Leiningen 'Lein Swank' per avviare il ServerSocket e gli sguardi dei file project.clj come questo

 (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"]])

Tutto sembra fino ad oggi, vale a dire 'Lein dipendenze' non produce alcuna modifica. Allora, cosa succede?

È stato utile?

Soluzione

  1. Stai diventando "Impossibile risolvere il simbolo" eccezioni perché :require non tirare in alcun Vars dalla data namespace, rende lo spazio dei nomi per sé solo.

    Pertanto, se si (:require foo.bar) nel modulo ns, bisogna foo.bar/quux scrittura per accedere al quux Var dalla foo.bar namespace. È inoltre possibile utilizzare (:require [foo.bar :as fb]) essere in grado di abbreviare tale a fb/quux. Un possiblity finale è (:use foo.bar) scrittura invece; che fa la Vars da foo.bar disponibile nello spazio dei nomi. Si noti che è generalmente considerato un cattivo stile di :use librerie esterne; è probabilmente ok all'interno di un unico progetto, però.

  2. Re: rendere automaticamente roba disponibili al REPL:

    Le clausole :require, :use e :refer delle forme ns hanno controparti nelle funzioni require, use e refer in clojure.core. Ci sono anche le macro corrispondenti a :refer-clojure e :import.

    Ciò significa che, al fine di rendere disponibili al clojure.contrib.trace REPL si può fare qualcosa di simile (require 'clojure.contrib.trace) o (require '[clojure.contrib.trace :as trace]). Si noti che a causa require è una funzione, è necessario citare la specifica libreria. (use e refer anche prendere citati lib specifiche;. import e refer-clojure non richiedono citando)

    Il modo più semplice per avere alcuni spazi dei nomi disponibili ogni volta che si lancia un Clojure REPL (anche quando lo si fa con SLIME) è quello di mettere le chiamate require appropriate in ~/.clojure/user.clj. Vedere la richiedono tutti i possibili spazi dei nomi post sul blog di John Lawrence Aspden per una descrizione di quello che si potrebbe mettere in user.clj di tirare in tutti di contrib (cosa che non faccio, personalmente, anche se ho un (use 'clojure.contrib.repl-utils) in là).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top