2012-06-14 2 views
2

Clojure 1.3과 함께 Leiningen 2 REPL을 사용합니다. 메타 데이터에 일관성없는 동작이 발생합니다.Clojure/lein repl & Metadata - 버그입니까?

이것이 맞는 경우 설명하십시오. 그렇지 않은 경우 - 버그를 어디로 신고해야합니까?

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} 

답변

1

'(quote ...)로 확장 독자 매크로입니다. 그래서 메타 데이터를 목록에 넣습니다. 이 시도 :

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

Shameless self-promotion.

+0

하하. 예. 당연하지. 그걸 봤어야 했어. (라인 번호에 대한 힌트는 무엇입니까?) – Falko

+0

오류보고를 위해 컴파일러에서 추가되었습니다. 목록은 함수 호출에 사용됩니다. – kotarak