代码之家  ›  专栏  ›  技术社区  ›  cryptic_star

Clojure中的动态let列表解构

  •  4
  • cryptic_star  · 技术社区  · 15 年前

    let 语句,在该语句中我希望动态地分解列表。以下是我的解决方案:

    symList  ;; list of some Strings which will become the vector of Symbols to assign to
    valList  ;; list of some values, same length as symList
    
    (let [(map read-string symList) valList]
      ...)
    

    示例值 symList 会是 ("pt1" "pt2") 举例说明 valList (1 2)

    但是,这会产生一个例外,即第一部分是“不支持的绑定形式”。我怀疑我遗漏了一些关于语法引用的东西,或者这是不可能的。任何建议都将不胜感激。

    编辑: 我只知道这些值在运行时出现,因此采用这种方法。其次,我需要能够通过词汇范围以后,因此使用 .

    4 回复  |  直到 15 年前
        1
  •  2
  •   Brian    15 年前

    如果symList和valList的值正确 编译时 ,则可以编写宏来执行此操作。如果只有在运行时才知道它们,则必须使用/编写一个函数来为您执行解构,并将解构的结果作为某个数据结构返回。

    在第二种情况下,对于这样简单的事情,可以使用 (zipmap symList valList)

        2
  •  0
  •   sjagr    15 年前
    (let [valList (map str symList)]
       (somefun valList))
    

    得到的错误是因为let语句是向后的(let[val SOURCE]STUFF)

        3
  •  0
  •   jneira    15 年前

    matchure 我能给你想要的

        4
  •  0
  •   cryptic_star    15 年前

    尽管我一直找不到一种动态分解列表的方法,但对于那些对创建按词汇而不是动态范围定义的值感兴趣的人,我发现 intern