2

Clojure 1.3 で Leiningen 2 REPL を使用しています。メタ データの動作に一貫性がありません (またはそう思う)。

これが本来あるべき姿であれば、説明してください。そうでない場合 - どこにバグを報告すればよいですか?

これは、メタデータがどのように機能するかです。

main=> (def a ^:inited  [ 1 2 3])
main=> (meta a)
{:inited true}

これは、引用された空のシーケンスを参照するときに得られるものです。

main=> (def a ^:inited  '() )
main=> (meta a)
nil

main=> (def a ^{:inited (System/currentTimeMillis)} '())
main=> (meta a)
nil

引用符で囲まれていない空のシーケンスの場合、すべて問題ありません。しかし、まあ、行番号を取得します。

main=> (def a ^{:inited (System/currentTimeMillis)} ())
main=> (meta a)
{:inited 1339678437612, :line 1}

main=> (def a ^:inited  () )
main=> (meta a)
{:inited true, :line 1}

ここでは行番号を取得しません:

main=> (def a ^:inited  [ 1 2 3])
main=> (meta a)
{:inited true}

main=> (def a ^{:inited (System/currentTimeMillis)} [1 2 3])
main=> (meta a)
{:inited 1339678534644}
4

1 に答える 1

1

'、 に展開されるリーダー マクロ(quote ...)です。それで、メタデータをリストに載せます。これを試して:

user=> (def a ' ^:inited [])
#'user/a
user=> (meta a)
{:tag :inited}
user=> (def a ^:inited '[])
#'user/a
user=> (meta a)
nil

恥知らずな自己宣伝。

于 2012-06-14T14:09:09.943 に答える