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
AFAIKbinding
本身不使用解构机制(通过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
不支持解构。这很有意义,我从来没有想过,“这些:键是本地的还是动态范围的?”这很有意义,我从来没有想过,“这些:键的作用域是本地的还是动态的?”