将列表元素传递到哈希映射时,Var clojure.core/unquote-splicting是未绑定错误
我试图从交错列表创建一个映射,但遇到了错误。以下是我正在做的:将列表元素传递到哈希映射时,Var clojure.core/unquote-splicting是未绑定错误,clojure,Clojure,我试图从交错列表创建一个映射,但遇到了错误。以下是我正在做的: (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
(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处键入(文件适用)
~@
是语法引号的两个同伴之一,写为backtick,另一个是~
:
`(~(+ 1 2) ~@[2 1])
; => (3 2 1)
这三个函数主要用于编写宏;您不能在语法quote之外使用
~
和~@
。您需要使用apply
:
(apply hash-map (interleave ['a 'b] [1 2]))
apply
将函数应用于一系列参数;有关详细信息,请在REPL处键入(文件适用)
~@
是语法引号的两个同伴之一,写为backtick,另一个是~
:
`(~(+ 1 2) ~@[2 1])
; => (3 2 1)
这三个函数主要用于编写宏;不能在quote语法之外使用~
和~@