问题标签 [double-splat]

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 投票
2 回答
2896 浏览

python - 更改 *splat 和 **splatty-splat 运算符对我的对象执行的操作

你如何覆盖解包语法的结果*obj**obj

例如,您能否以某种方式创建一个thing行为如下的对象:

注意:通过 ("for x in thing") 的迭代__iter__从 *splat 解包返回不同的元素。

我看过operator.muland operator.pow,但这些函数只涉及两个操作数的用法,比如a*band a**b,并且似乎与 splat 操作无关。

0 投票
1 回答
2445 浏览

ruby - 在方法调用中使用 Ruby 的 double-splat (`**`) 有什么意义?

使用单个 splat,我们可以将数组扩展为多个参数,这与直接传递数组有很大不同:

但是,使用关键字参数,我看不出有任何区别,因为它们只是散列的语法糖:

除了良好的对称性之外,还有什么实际理由在方法调用上使用双板吗?(请注意,这与在方法定义中使用它们不同)

0 投票
2 回答
843 浏览

ruby - Double-splat 运算符破坏性地修改了哈希——这是一个 Ruby 错误吗?

我注意到我发现**Ruby 2.1.1 中的 (double-splat) 运算符有一个非常令人惊讶的行为。

当在 a 之前使用键值对时**hash,哈希值保持不变;但是,当键值对仅在 之后使用**hash时,哈希值将被永久修改。

*为了比较,考虑数组中单运算符的行为:

数组始终保持不变。


我们是否认为有时具有破坏性的行为**是故意的,还是看起来更像是一个错误?

无论哪种情况,描述**操作员如何工作的文档在哪里?


我也在Ruby 论坛上问过这个问题。

更新

该错误已在 Ruby 2.1.3+ 中修复。

0 投票
0 回答
42 浏览

ruby - 在 Ruby 中链接双板

以下行为是错误还是功能?

使用获得:

如果是一项功能,在哪里可以阅读到它?谢谢!

问候,伊万

0 投票
2 回答
287 浏览

ruby - `nil` 上的双重 splat

我的理解是,非数组对象上的单个 splat 调用to_a然后将元素分离。并且由于nil.to_a定义为[],因此会发生以下转换:

以此类推,我认为非散列对象上的双重 splat 调用to_h然后将键值对分开。由于nil.to_h被定义为{},我预计会发生以下转换:

但实际上,它引发了一个错误:no implicit conversion of nil into Hash. 为什么它会这样?

编辑我不是在问设计背后的原因。我在问我关于双 splat 的想法哪里错了。

0 投票
1 回答
630 浏览

ruby - 在 Ruby 中使用双 splat 扩展变量中的空哈希

我在尝试使用 double splat 扩展哈希变量时遇到了这种奇怪的行为。不知道为什么会这样。

我的红宝石版本

ruby 2.2.6p396 (2016-11-15 revision 56800)

设想

有谁知道为什么会这样?这是一个错误吗?

0 投票
3 回答
2067 浏览

ruby - Ruby 中的关键字参数解包(splat)

下面发生的事情对我来说似乎有点奇怪。

这是编译器优化功能吗?

0 投票
2 回答
120 浏览

arguments - 两级飞溅 TCL

如果我在 TCL 中有一个过程或命令,具有可变数量的参数,如果列表的元素作为输入,则可以使用“飞溅”运算符,例如:

但是,如果我想“两次飞溅”怎么办?即,展平2个级别?按顺序使用它两次,不起作用:

额外字符会出错。

0 投票
1 回答
706 浏览

ruby - Ruby double splat 参数对 Hash 参数过于贪婪

在 Ruby 2.4.1 中,我有一个这样的方法:

我可以传入不是哈希的位置参数就好了:

如果我想使用命名参数,那也没关系:

但是尝试将 Hash 作为位置参数传递,会发生这种情况:

*args想拿{something: 42},没有**kwargs

位置参数必须是可选的,但即使*argsarg=nil,双 splat 仍然太贪婪:

当该方法也采用时,如何将哈希作为位置参数传递**

0 投票
2 回答
4259 浏览

javascript - 参数解构(相当于python的double-splat)

**在 python 中,我可以通过(double-splat) 运算符传递其键与参数名称匹配的字典:

如何在 ES6 中做同样的事情?这不起作用:

注意:我正在寻找一种不涉及更改签名的解决方案,foo因为我希望它以任何一种方式使用(有和没有解构)。所以以下应该工作:

奖励问题:为什么错误消息“未定义不是函数”?这里到底是什么未定义?

(正如@Nina Scholz 在评论中回答的那样,这是因为...需要它的参数 have Symbol.iterator,这不是为对象定义的)。