问题标签 [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.
python - 更改 *splat 和 **splatty-splat 运算符对我的对象执行的操作
你如何覆盖解包语法的结果*obj
和**obj
?
例如,您能否以某种方式创建一个thing
行为如下的对象:
注意:通过 ("for x in thing") 的迭代__iter__
从 *splat 解包返回不同的元素。
我看过operator.mul
and operator.pow
,但这些函数只涉及两个操作数的用法,比如a*b
and a**b
,并且似乎与 splat 操作无关。
ruby - 在方法调用中使用 Ruby 的 double-splat (`**`) 有什么意义?
使用单个 splat,我们可以将数组扩展为多个参数,这与直接传递数组有很大不同:
但是,使用关键字参数,我看不出有任何区别,因为它们只是散列的语法糖:
除了良好的对称性之外,还有什么实际理由在方法调用上使用双板吗?(请注意,这与在方法定义中使用它们不同)
ruby - Double-splat 运算符破坏性地修改了哈希——这是一个 Ruby 错误吗?
我注意到我发现**
Ruby 2.1.1 中的 (double-splat) 运算符有一个非常令人惊讶的行为。
当在 a 之前使用键值对时**hash
,哈希值保持不变;但是,当键值对仅在 之后使用**hash
时,哈希值将被永久修改。
*
为了比较,考虑数组中单运算符的行为:
数组始终保持不变。
我们是否认为有时具有破坏性的行为**
是故意的,还是看起来更像是一个错误?
无论哪种情况,描述**
操作员如何工作的文档在哪里?
我也在Ruby 论坛上问过这个问题。
更新
该错误已在 Ruby 2.1.3+ 中修复。
ruby - 在 Ruby 中链接双板
以下行为是错误还是功能?
使用获得:
如果是一项功能,在哪里可以阅读到它?谢谢!
问候,伊万
ruby - `nil` 上的双重 splat
我的理解是,非数组对象上的单个 splat 调用to_a
然后将元素分离。并且由于nil.to_a
定义为[]
,因此会发生以下转换:
以此类推,我认为非散列对象上的双重 splat 调用to_h
然后将键值对分开。由于nil.to_h
被定义为{}
,我预计会发生以下转换:
但实际上,它引发了一个错误:no implicit conversion of nil into Hash
. 为什么它会这样?
编辑我不是在问设计背后的原因。我在问我关于双 splat 的想法哪里错了。
ruby - 在 Ruby 中使用双 splat 扩展变量中的空哈希
我在尝试使用 double splat 扩展哈希变量时遇到了这种奇怪的行为。不知道为什么会这样。
我的红宝石版本
ruby 2.2.6p396 (2016-11-15 revision 56800)
设想
有谁知道为什么会这样?这是一个错误吗?
ruby - Ruby 中的关键字参数解包(splat)
下面发生的事情对我来说似乎有点奇怪。
这是编译器优化功能吗?
arguments - 两级飞溅 TCL
如果我在 TCL 中有一个过程或命令,具有可变数量的参数,如果列表的元素作为输入,则可以使用“飞溅”运算符,例如:
但是,如果我想“两次飞溅”怎么办?即,展平2个级别?按顺序使用它两次,不起作用:
额外字符会出错。
ruby - Ruby double splat 参数对 Hash 参数过于贪婪
在 Ruby 2.4.1 中,我有一个这样的方法:
我可以传入不是哈希的位置参数就好了:
如果我想使用命名参数,那也没关系:
但是尝试将 Hash 作为位置参数传递,会发生这种情况:
我*args
想拿{something: 42}
,没有**kwargs
。
位置参数必须是可选的,但即使*args
是arg=nil
,双 splat 仍然太贪婪:
当该方法也采用时,如何将哈希作为位置参数传递**
?
javascript - 参数解构(相当于python的double-splat)
**
在 python 中,我可以通过(double-splat) 运算符传递其键与参数名称匹配的字典:
如何在 ES6 中做同样的事情?这不起作用:
注意:我正在寻找一种不涉及更改签名的解决方案,foo
因为我希望它以任何一种方式使用(有和没有解构)。所以以下应该工作:
奖励问题:为什么错误消息“未定义不是函数”?这里到底是什么未定义?
(正如@Nina Scholz 在评论中回答的那样,这是因为...
需要它的参数 have Symbol.iterator
,这不是为对象定义的)。