Clojure 是否可以在绑定中分解贴图?

Clojure 是否可以在绑定中分解贴图?,clojure,destructuring,Clojure,Destructuring,是否可以在一个功能中执行此操作: (binding [*configs* (merge default-configs configs)] (let [{:keys [login url max-pages]} *configs*] .. 当我尝试这样做时: (binding [{:keys [login url max-pages] :as *configs*} (merge default-configs configs)] 它给了我这个错误: CompilerExc

是否可以在一个功能中执行此操作:

(binding [*configs* (merge default-configs configs)]
    (let [{:keys [login url max-pages]} *configs*]
      ..
当我尝试这样做时:

(binding [{:keys [login url max-pages] :as *configs*} (merge default-configs configs)]
它给了我这个错误:

CompilerException java.lang.ClassCastException:clojure.lang.PersistentArrayMap不能强制转换为clojure.lang.Symbol

通过谷歌搜索,我发现Common Lisp有一个名为
DestructureBind
的函数,但我不确定这是否相关

Clojure支持抽象结构绑定,通常称为 解构、in-let绑定列表、fn参数列表和任何宏 扩展为let或fn

AFAIK
binding
本身不使用解构机制(通过
let
fn
)。

“绑定表单(解构)”:

Clojure支持抽象结构绑定,通常称为 解构、in-let绑定列表、fn参数列表和任何宏 扩展为let或fn


AFAIK
binding
本身不使用解构机制(通过
let
fn
)。

不,这样的机制不能用于核心宏

原因是
绑定
(和朋友,例如带有绑定的
)只做一件事。在
绑定的情况下
,就是为Vars安装线程本地绑定;对于
let
,它引入了本地绑定。这是完全不同的操作

let
中,解构有一个明确的含义:它引入了新的局部变量,这正是基本的非解构
let
绑定所做的。这显然也很有用,因为窥探装置数据结构并将不同部分绑定到不同的局部是一种常见的需要。局部变量的名称也是局部确定的,因此在关联分解结构中类似于
:keys
的功能很好

绑定中,为了与其主要目的保持一致,解构需要将多个变量同时绑定到数据结构的多个部分。这几乎没有那么有用。如果在
binding
中反结构引入局部变量,那么突然
binding
会做两件不相关的事情,可能都在同一个绑定对中(请注意,问题文本中失败的
绑定
表单如何期望
:keys
引入的绑定是局部的,但是
:as
生成的绑定是Var的常规线程局部绑定)。因此
绑定
只是选择不支持解构。(如果需要将数据结构的一部分绑定到多个变量,可以使用
let
执行分解,然后使用
binding
安装绑定)



至于
解构绑定
,它基本上是Common Lisp中启用解构功能的
let
。CL的
let
不支持解构。

不,这样的操作对核心宏不起作用

原因是
绑定
(以及朋友,例如带有绑定的
)只做一件事。在
绑定
的情况下,这件事是为Vars安装线程本地绑定;对于
,它引入本地绑定。这是完全不同的操作

let
中,解构有一个明确的含义:它引入了新的局部变量,这正是基本的非解构
let
绑定所做的。这显然也很有用,因为撬取数据结构并将不同部分绑定到不同的局部变量是一种常见的需要。局部变量的名称也是本地确定的,因此像
:键
这样的东西在关联解构中工作得很好

binding
中,为了与其主要目的一致,解构需要将多个变量同时绑定到数据结构的多个部分。这几乎没有那么有用。如果在
binding
中解构是引入局部变量,那么突然之间
binding
会做两件不相关的事情,poss在同一个绑定对中(注意问题文本中失败的
绑定
表单如何期望
:keys
引入的绑定是局部的,但是
:as
所做的绑定是Var的常规线程局部绑定)。因此
绑定
只是选择不支持解构。(如果需要将数据结构的一部分绑定到多个变量,可以使用
let
执行分解,然后使用
binding
安装绑定)



至于
解构绑定
,它基本上是Common Lisp中启用解构功能的
let
。CL的
let
不支持解构。

这很有意义,我从来没有想过,“这些
:键是本地的还是动态范围的?”这很有意义,我从来没有想过,“这些
:键的作用域是本地的还是动态的?”