在将列表元素传递给hash-map时,var clojure.core/unquote-splicing是未绑定的错误

Bal*_*ala 1 clojure

我试图从交错列表创建一个映射并运行错误.这是我在做的事情:

(interleave ['a 'b] [1 2])
Run Code Online (Sandbox Code Playgroud)

给出列表(a 1 b 2).

如果我想从一堆元素创建一个哈希映射,我可以做到

(hash-map 'a 1 'b 2)
Run Code Online (Sandbox Code Playgroud)

将两者结合在一起,

(hash-map ~@(interleave ['a 'b] [1 2]))
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.IllegalStateException: Var clojure.core/unquote-splicing is unbound. (repl-1:2)
Run Code Online (Sandbox Code Playgroud)

如何将列表元素传递给哈希映射?

Mic*_*zyk 6

你需要使用apply:

(apply hash-map (interleave ['a 'b] [1 2]))
Run Code Online (Sandbox Code Playgroud)

apply将函数应用于seq参数; (doc apply)在REPL 键入以获取详细信息.

~@是语法引用的两个伴随之一,写为反引号,另一个是~:

`(~(+ 1 2) ~@[2 1])
; => (3 2 1)
Run Code Online (Sandbox Code Playgroud)

这三个主要用于编写宏; 你不能使用~~@语法之外的语句.