2017-05-09 9 views
1

外国のクローゼットコードのファイルを分析したいと思います。私は現在、すべてのフォームを読み取るためにclojure.tools.readerを使用しています:クローゼットコードを解析するためのClojureコード

(require '[clojure.tools.reader :as reader]) 

(defn read-all-forms [f] 
    (let [rdr (indexing-push-back-reader (slurp f)) 
     EOF (Object.) 
     opts {:eof EOF}] 
    (loop [ret []] 
     (let [form (reader/read opts rdr)] 
     (if (= EOF form) 
      ret 
      (recur (conj ret form))))))) 

この一般的にはエイリアスNSを指し、二重コロンキーワードに遭遇した場合を除き、動作します。例:このようなキーワードは、ファイルを読み込み、解決するためにclojure.tools.readerを使用する方法はあり

ExceptionInfo Invalid token: ::bar/baz

(ns foo 
    (:require [foo.bar :as bar])) 

::bar/baz 

はで失敗しますか?どういうわけか自分で*alias-map*を追跡するはずですか?

答えて

3

tools.readerがバインドされている場合はclojure.tools.reader/*alias-map*を使用し、そうでない場合は(ns-aliases *ns*)を使用してエイリアスを解決します。したがって、ファイルに自動解決されたキーワードがある場合は、これらの方法のいずれかを使用して、自動解決されたエイリアスを解決する必要があります。

+0

ありがとうございました!私は '結びつく(reader/* alias-map * identity(reader/read ...))'をやめました。うまくいけばそれはあまりにも多くの虐待ではない。 (私の目的では、正確なエイリアスマップの解決は必要ありません)。 –

関連する問題