问题标签 [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.

0 投票
4 回答
10584 浏览

javascript - JavaScript 中的解构赋值

从 JavaScript 1.7 的 Mozilla changlog 中可以看出,它们添加了解构赋值。可悲的是,我不太喜欢这种语法(为什么要写两次 a 和 b?):

这样的事情会好很多:

那仍然是向后兼容的。类似 Python 的解构不会向后兼容。

无论如何,我能想到的 JavaScript 1.5 的最佳解决方案是:

其工作原理如下:

但这真的很糟糕,因为 _ 没有任何意义。它只是一个空壳来存储名称。但遗憾的是它是必需的,因为 JavaScript 没有指针。从好的方面来说,您可以在值不匹配的情况下分配默认值。另请注意,此解决方案不会尝试对数组进行切片。所以你不能做类似的事情{first: 0, rest: 0}。但是,如果有人想要这种行为,那很容易做到。

什么是更好的解决方案?

0 投票
2 回答
1319 浏览

macros - 如何将可选关键字参数与 & rest 的东西混合?

我有一个需要身体的宏:

但我也想为它添加一个可选的关键字参数,所以当它被调用时,它可能看起来像以下任何一种:

我怎样才能做到这一点?请注意,我使用的是 Clojure 1.2,因此我还使用了新的可选关键字参数解构内容。我天真地尝试这样做:

但显然这并没有奏效。我怎样才能完成这个或类似的事情?

0 投票
4 回答
1290 浏览

syntax - Clojure 中的动态 let 列表解构

我有一个let声明,我想在其中动态解构列表。以下是我的解决方案:

的一个示例值symList("pt1" "pt2"),一个示例值valList(1 2)

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

编辑:我只会在运行时知道这些值,因此这种方法。其次,我需要稍后能够传递词法范围,因此使用let.

0 投票
4 回答
73521 浏览

javascript - 将字符串直接拆分为变量

我想知道标准 JS 是否提供了一种在初始声明期间将字符串直接拆分为一组变量的方法。例如在 Perl 我会使用:

在 Firefox 中我可以写

但是这种语法不是 ECMAScript 第 5 版的一部分,因此在所有其他浏览器中都会中断。我想做的是避免写:

因为对于我目前正在编写的代码来说,这种方法真的很痛苦,我从 7 个不同的拆分中创建了 20 个变量,并且不想使用这种冗长的方法。

有谁知道这样做的优雅方法?

0 投票
2 回答
1838 浏览

clojure - 解构形式和组合?

我想我会发布这个,因为我在没有真正了解发生了什么的情况下通过猜测来工作,我认为如果有人解释它可能会有所帮助。

我了解如何在 Compojure 处理程序中获取 :params 映射的元素:

或者

虽然我不完全理解这{some_arg "some_arg"}部分在做什么:(

我还想访问:remote-addr请求的部分以及some_arg. 最后我得到了

因此,我得到了未加引号的字符串some_arg,并且ip是我希望将值绑定到的变量的名称,但上面的映射不是有效的 Clojure 映射。它是如何工作的?

我还知道这是针对 Ring 请求映射(以某种方式由defroutes宏提供)进行评估的,但上面的表达式不是函数或宏定义,那么它如何“存在”为我的代码中的有效表达式?宏参数的正常规则是否有某种暂停?我一直无法找到这个非 Lisp'er 可以理解的解构形式的语法定义。

0 投票
2 回答
4983 浏览

clojure - 在另一个地图中解构地图?

我有以下数据结构:

我想编写一个将:resolution键解构为width符号height的函数。就像是

解构可能会发生类似的事情吗?

谢谢。

0 投票
12 回答
160573 浏览

javascript - 来自元组的 JavaScript 变量赋值

在 Python 2 和 Python 3 等其他语言中,您可以定义元组变量并将其赋值给元组变量,然后像这样检索它们的值:

JavaScript中有类似的东西吗?还是我只需要使用数组以丑陋的方式进行操作:

有没有更好的方法在 JavaScript 5 中模拟 Python 元组?

更新:请参阅有关 ES6 的答案,对于新项目,它应该优于 CoffeeScript。

0 投票
1 回答
741 浏览

ruby - 这是 Method#to_proc 中的错误吗?(红宝石 1.8.7)

给定以下采用一个参数的方法:

我可以用一个空数组来调用它:

我也可以将它保存为一个Method对象并用一个空数组调用,结果相同:

但是,如果我将Method对象转换为 a并使用空数组Proc调用ArgumentError,我会得到:

我希望它的行为与前两种情况相同。相反,它似乎表现得好像我写了foo(*[]). 但是,如果我用空数组调用它,它的行为确实符合我的预期:

所以它解构了参数,但前提是参数恰好是一个空数组。只有当我打电话时Method#to_proc

我对如何MethodProc工作的理解存在差距,还是这是一个错误?

我正在运行 Ruby 1.8.7-p299。我在 1.8.6-p399 和 1.8.7-head 中观察到相同的行为。但是,我在 1.9.1-p378 中看不到它:[]当使用空数组调用时,所有三种表单都会打印。

0 投票
2 回答
5498 浏览

scala - 在 Scala 闭包中“解构” Map.Entry

有没有更好的方法来解构 Map.Entry?我尝试了以下方法,但无法编译:

0 投票
7 回答
45714 浏览

python - 使用动态变量名称一次分配多个变量

我知道我可以一次将多个变量分配给多个值:

并且有 foo = 1,bar = 2,依此类推。

但是我怎样才能使变量的名称更加动态呢?IE,

和有同样的吗?