【问题标题】:Var clojure.core/unquote-splicing is unbound error while passing list elements to hash-mapvar clojure.core/unquote-splicing 在将列表元素传递给哈希映射时出现未绑定错误
【发布时间】:2010-08-22 16:23:45
【问题描述】:

我正在尝试从交错列表创建地图并遇到错误。这是我正在做的事情:

(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)

如何将列表的元素传递给 hash-map?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    你需要使用apply:

    (apply hash-map (interleave ['a 'b] [1 2]))
    

    apply 将函数应用于一系列参数;在 REPL 中输入 (doc apply) 了解详细信息。

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

    `(~(+ 1 2) ~@[2 1])
    ; => (3 2 1)
    

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

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 2018-02-24
      • 1970-01-01
      • 2018-10-04
      • 2018-11-13
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多