3

名前空間のメタデータを取得するにはどうすればよいですか? 代わりに私は:

=> (in-ns my.test)
#<Namespace my.test>
=> (meta *ns*)
{:a "hello"}
=> ; Return back to repl namespace:
   (in-ns 'user)
   ; Or use 'with-ns

私の名前空間の定義は次のとおりです。

(ns ^{:a "hello"} my.test
  ...)

(meta #'my.test)バリアントはどれも失敗しますが、 def-ined エンティティには適しています。(ns...)変数を定義しておらず、外部から参照できない特別な var であることは理解できます*ns*が、実際に何が起こるかは疑問です。

4

1 に答える 1

3

AFAICTnsフォームに渡されたシンボリック名に添付されたメタデータが名前空間オブジェクトに適切に添付されないという長年の問題があります。

別の方法として、追加の引数を に渡すことができますns:

(ns foo.core
  "This is foo.core's excellent docstring."
  {:interesting "piece of metadata"}
  (:require [bar.core :as bar]))

このスタイルは期待どおりに機能します。私はたまたまそれがより審美的にも楽しいと感じています。

注意。名前付きオブジェクトを導入する他の Clojure マクロも、この方法で追加の docstring / metadata 引数を受け入れる傾向があります。

(defn foo
  "A particularly lucid docstring for foo."
  {:trivia "The first function named foo was written in ..."}
  []
  ; ...
  )
于 2013-09-17T23:54:22.110 に答える