问题标签 [destructuring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - 是否有一个 Clojure 函数接受一个映射并返回一系列交替的键和值?
给定一个 map {:a 1 :b [2,3]}
,是否有一个内置函数可以返回 sequence (:a 1 :b [2,3])
。
用例是将选项映射应用于对参数列表的其余部分进行映射解构绑定的函数。这是 core.cache 中的一个示例。这是一个人为的例子来说明:
现在,如果我们想单独管理选项并将apply
它们管理到函数中,我们就会遇到问题:
...因为seq
地图的当然是其键值对的序列。这是我想出的最好的:
这太可怕了。我知道我可以创建自己的函数来执行此操作,但我很惊讶我没有找到内置的东西。如果没有内置的东西,那么我可能想避免在库代码中像这样解构参数列表。
clojure - clojure 中的解构映射——未使用的键
我已经定义了一个带有地图的函数。我想使用解构来访问这些值。但是,我还想检查是否有任何使用过的键。
所以,例如像......
这将打印
我想要这个的原因是,如果 rest 不为空,这可能是一个错误,我想发出信号。我知道 :as,我可以使用它。但是我需要将有效密钥列表存储两次。
我错过了什么吗?
菲尔
coffeescript - 咖啡脚本中的对象/数组比较简写?
CoffeeScript 有很多有用的关于具有理解和解构的数组和对象的简写。是否有比较整个对象或其多个属性的快速简写?IE
activity.date() 被选中。date() 和 activity.month() 被选中。month()
有点像
活动[日期(),月份()]被选中[日期(),月份()]
我在文档中没有看到类似的东西,但我想我会问。
map - 在 Clojure 中,是否有一种惯用的方式在宏定义中解构地图?
我一直在一个 web 项目中使用 noir,我想限制对用户的访问,这取决于他们对 defpage 宏定义的所有可能路由的访问级别(和子级别)。所以最初我有
然后我认为这将摆脱样板代码:
最后,我们使用它如下:
但是正如 Rich Hickey 的这篇文章所提到的,https: //groups.google.com/forum/#!msg/clojure/4II-HKr_Pu0/2IcKit99cagJ ,由于位置绑定,感觉有点尴尬,这不是惯用的当已经存在地图时。
但是,我一直在寻找一些关于在宏中使用解构绑定的示例或讨论,遗憾的是,我没有发现它们的任何明确用途,因为它一直在传递未计算的表达式。
因此,我想到了以下解决方案:
但是现在,还不清楚如何将映射本地的数据映射从 :get 和 :post 传递到上面的示例中的本地。
我做对了,让我的第一次尝试不受干扰,还是我真的需要使用第二种方法?我希望不是。还有其他选择吗?请告诉我。
clojure - Let形式的从左到右的装订顺序
我正在研究 Clojure中的一个解构示例,并且遇到了一个令我惊讶的示例。这两个产生相同的输出:
现在最初第一种形式与我的直觉相反,因为认为绑定和优先级从左到右发生,在分配给“all”之前不会定义 range-vec。我的第二种形式,range-vec已经定义好了,然后在第二个let语句中赋值给all,这似乎是遵循我目前所知道的规则。我什么时候知道符号何时被绑定以及发生的顺序?
clojure - 按索引解构向量
我想知道是否有办法按索引解构向量。基本上,一个可以让我避免的速记:
这是我的基本问题:
clojure - 为什么可以将键值对传递给解构映射的函数?
我以为我理解解构,但我正在阅读 clojure 博客,这让我很困惑。如果你有一个这样写的函数:
为什么你可以这样称呼它:
我的第一个想法是我的函数应该这样调用:
但显然这行不通。我认为这与&
工作方式有关。但我一直认为它后面的东西是一个向量,因此你必须像向量一样解构它后面的任何东西。
有人可以向我解释这个定义是如何/为什么会这样工作的吗?谢谢
clojure - 是否可以在绑定中解构地图?
是否可以在一个功能中做到这一点:
当我尝试这个时:
它给了我这个错误:
CompilerException java.lang.ClassCastException:clojure.lang.PersistentArrayMap 无法转换为 clojure.lang.Symbol
一点谷歌搜索向我展示了 Common Lisp 有一个名为的函数,destructure-bind
但我不确定这是否相关。