我试图从交错列表创建一个映射并运行错误.这是我在做的事情:
(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)
如何将列表元素传递给哈希映射?
你需要使用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)
这三个主要用于编写宏; 你不能使用~和~@语法之外的语句.
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |