[英]Var clojure.core/unquote-splicing is unbound error while passing list elements to hash-map
我正在嘗試從交錯列表創建地圖並遇到錯誤。 這是我在做什么:
(interleave ['a 'b] [1 2])
給出列表(a 1 b 2)。
如果我想從一堆元素中創建一個哈希映射,我可以做
(hash-map 'a 1 'b 2)
將兩者結合在一起
(hash-map ~@(interleave ['a 'b] [1 2]))
我收到此錯誤:
java.lang.IllegalStateException: Var clojure.core/unquote-splicing is unbound. (repl-1:2)
如何將列表的元素傳遞給哈希映射?
您需要使用apply
:
(apply hash-map (interleave ['a 'b] [1 2]))
apply
將函數應用於一系列參數; 請在REPL上鍵入(doc apply)
以獲取詳細信息。
~@
是語法引用的兩個同伴之一,寫為反引號,另一個是~
:
`(~(+ 1 2) ~@[2 1])
; => (3 2 1)
這三個主要用於編寫宏。 您不能在語法引號之外使用~
和~@
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.