2

我将 Leiningen 2 REPL 与 Clojure 1.3 一起使用。我的元数据行为不一致(或者我认为)。

如果这是应该的,请解释一下。如果没有 - 我应该在哪里提交错误?

这就是元数据应该如何工作,AFAIK。

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 回答