1

重複の可能性:
ns形式のrequireがrequire関数とは異なる動作をするのはなぜですか

私はclojureに手を出していて、インポートで問題が発生しました。REPLから

clojure.core=>(import '(java.io FileReader))
clojure.core=>(import 'java.io.FileReader)
clojure.core=>(import java.io FileReader)

それぞれが完全に機能しますが、ファイルからは次の機能のみが機能します。

(ns project.core
  (import java.io.FileReader))

これらはそれぞれ失敗します

(ns project.core
  (import 'java.io.FileReader)) 

(ns project.core
  (import '(java.io FileReader))

次のエラーが発生します。

ClassNotFoundException quote.java.io.FileReader  java.net.URLClassLoader$1.run (URLClassLoader.java:366)

ClassNotFoundException quote.(java.io FileReader)  java.net.URLClassLoader$1.run (URLClassLoader.java:366)

それぞれ。

実際には、単なるインポート以上のものをインポートする必要がありますjava.io.FileReaderが、これは問題の蒸留バージョンです。

何がうまくいかない可能性があるアイデアはありますか?私は他のどこにも問題を見つけることができないようです

4

1 に答える 1

3

解決策は次のとおりです。

(ns project.core
  (:import [java.io FileReader BufferedReader FooBar]))

これが必要な理由については、nsマクロはを含むいくつかのディレクティブを受け入れます:import。マクロの実装方法により、importディレクティブへの引数はリストのような形式である必要があります。つまり、[java.io ...]。ちなみに、のようなリスト(java.io ...)も同様に機能します。

使用方法の完全な概要についてはns、ClojureDocsページ(http://clojuredocs.org/clojure_core/clojure.core/ns )を参照してください。ClojureDocsは、この種の問題の貴重なリソースです。

于 2012-10-15T05:36:34.363 に答える