问题标签 [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 投票
3 回答
1331 浏览

haskell - 一次解构两个元素的列表(Clojure)

这个问题有多种形式。例如,给定输入 '(1 2 3 4 5 6),我们可能希望交换偶数和奇数对之间的值。输出将是'(2 1 4 3 6 5)。

在 Haskell 中,这相当简单:

我写了一些 Clojure 代码来完成相同的任务,但我觉得可能有一种更清洁的方法。关于如何改进这一点的任何建议?

理想情况下,列表会被懒惰地消耗和产生。谢谢。

0 投票
7 回答
35471 浏览

ruby-on-rails - 如何一次获取多个哈希值?

什么是更短的版本?:

请注意fetch,如果密钥不存在,我想引发错误。

它必须有更短的版本,例如:

如果需要,可以使用 ActiveSupport。

0 投票
1 回答
107 浏览

clojure - 这种解构让表单如何工作?

考虑这种形式:

我已经读过,如果我必须以某种形式声明一些未使用的变量,我应该 在这种解构形式let中用 like 来表示它们:_

我的问题是分配如何_发生?由于这不会引发异常,我假设第二个_会覆盖第一个,但我不确定。那么这是如何工作的呢?

0 投票
1 回答
200 浏览

macros - 可以使用 destructuring-bind 定义 destructuring-setq 吗?

有解构绑定,但似乎没有解构setq。是否可以使用解构绑定来定义它?

0 投票
2 回答
77 浏览

clojure - 如何使用 var 中的向量进行解构

我想做这个

但是[a b c]保存在这样的向量中

是否有可能以某种方式使用 var 来定义如何解构?

0 投票
5 回答
1573 浏览

macros - database_column_names 的 clojure-variable-names

这是一个“什么是 Clojure 中最惯用的”问题。

我将 Cassandra 用于我的数据库,并将 Alia 作为我的 Clojure 驱动程序(Cassandra 和 Alia 都工作得非常好——再高兴不过了)。

问题是这样的:Cassandra 在列名中使用下划线(不是破折号),而 Clojure 更喜欢破折号而不是下划线。所以 Clojure 中的“user-key”是 Cassandra 中的“user_key”。如何最好地处理 Cassandra 列名到 Clojure 变量的映射?

因为我为我的 CQL 查询使用准备好的语句,所以我认为列名包含下划线而不是破折号这一事实不仅仅是要抽象出来的实现细节——我经常将 CQL 查询作为字符串放入我的 Clojure 代码中,而且我认为按实际情况表示 CQL 很重要。我已经考虑过在查询字符串中自动将破折号转换为下划线的方法,因此有一个 Clojure 版本的 CQL 映射到 CQL 的 Cassandra 版本,但这似乎是一个不适当的抽象级别。此外,当您直接在 Cassandra 中运行 CQL 查询以进行故障排除时,您仍然需要使用下划线,因此您需要在脑海中保留两种不同的列名表示。似乎是错误的方法。

我最终采用的方法是在 Clojure 解构映射中执行映射,如下所示:

(“conn/exec-1-row-ps”是我的便利函数,它只是在映射中查找 CQL 字符串,并使用先前准备的语句(如果存在),或者准备语句并将其存储在映射中,并且然后执行准备好的语句并返回结果集的第一行,如果返回多行则抛出异常)。

如果我使用更简洁的 {:keys []} 解构方法,那么我的 Clojure 变量名中就会出现下划线:

这是我尝试的第一种方法,但它变得非常难看,因为带有下划线的变量名渗透到代码中,并与带有破折号的变量名正面交锋。令人困惑。

长期以来一直面临这个问题,在解构映射中进行转换,其中 Clojure "variable-name" 和 Cassandra "column_name" 并排感觉是最好的解决方案。它还允许我在需要时将 short_col_nms 扩展为更具描述性的变量名称。

这与 Clojure 将文件名中的下划线映射到命名空间中的破折号有一些相似之处,因此感觉像这样进行映射有一些先例。在文件名/命名空间的情况下,Clojure 自动进行映射,因此直接模拟可能是 {:keys []} 解构的一个版本,它将破折号映射到下划线。

我是 Clojure 的新手,所以我意识到可能有更好的方法来做到这一点。因此我的问题。

我考虑过的一项改进是编写一个在编译时动态构建解构映射的宏。但我不知道如何编写一个在编译过程早期运行的宏。

0 投票
1 回答
233 浏览

coffeescript - 如何在解构函数参数中重命名“_arg”?

我有一个这样的减少功能:

这工作正常,但现在第二个参数的名称编译为_arg. 我怎样才能给它一个不同的名字?我尝试了几种不同的方法,例如arg = { commit: id: cid, type: type }and { commit: id: cid, type: type } : arg{ commit: id: cid, type: type } = arg但没有任何东西可以编译成预期的结果。我的语法有什么问题?

0 投票
2 回答
138 浏览

javascript - JavaScript 1.7 中的解构

JavaScript 1.7 允许解构:

有没有办法让数组的其余部分和头部像:Clojure

Python

参考: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7#Using_JavaScript_1.7

0 投票
3 回答
470 浏览

data-structures - 映射clojure中向量的解构列表中的每个元素

我是一名大学讲师,试图在获得一点 Clojure 乐趣的同时计算我的成绩。我已经将我所有的学生编号及其相应的成绩列成如下所示的列表:

我希望调整成绩,使这些向量中的一、二、三、四、五年级的权重分别为 10%、20%、15%、25% 和 30%。为了帮助我完成这项任务,我创建了一个辅助函数:

我想创建另一个函数,该函数将映射成绩列表,并根据其位置,以向量中每个元素的特定权重将百分比函数应用于每个学生的成绩。这就是我现在正在使用的东西,但我无法让它在 repl 中工作。我认为这与我构建班级数据的方式有关,或者我对 println 的使用感到困惑。

然后我想调用这个函数来以可读的形式返回带有学生人数的最终成绩。有人可以帮助我走上正轨吗?

0 投票
1 回答
105 浏览

lisp - 将 alist 解构为字符串的函数

我的目标是获取一个 alist(alist 是传递给 Drakma 的“参数”参数的那个;但这对于这个问题并不重要)并将其序列化为某种形式的字符串(在这种情况下,一个 HTTP 参数字符串)。

所以让我们来看看这个清单:

然后我想要的是最终得到一个格式如下的字符串:

到目前为止我所做的是:

它有点工作,但我真的不喜欢这个有几个原因:

  • 我不想使用特殊变量
  • 每次我运行(serialize-params (...))时,*s*只需附加到上一个调用

我认为要解决我的问题,我必须以loop某种特殊的方式使用,并且可能必须在我的函数中绑定一个词法变量。问题是我不确定如何将每次迭代附加(format nil "...")到该词法变量...

免责声明:我是 lisp 的新手。