双splat操作符破坏性修改哈希 – 这是一个Ruby错误?
发布时间:2020-12-16 22:30:52 所属栏目:百科 来源:网络整理
导读:我发现在 Ruby 2.1.1中的**(double-splat)操作符,我觉得这是一个非常令人惊讶的行为. 当在一个**散列之前使用键值对时,散列保持未修改;然而,当键值对仅在**散列之后使用时,哈希将被永久修改. h = { b: 2 }{ a: 1,**h } # = { a: 1,b: 2 }h # = { b: 2 }{ a:
我发现在
Ruby 2.1.1中的**(double-splat)操作符,我觉得这是一个非常令人惊讶的行为.
当在一个**散列之前使用键值对时,散列保持未修改;然而,当键值对仅在**散列之后使用时,哈希将被永久修改. h = { b: 2 } { a: 1,**h } # => { a: 1,b: 2 } h # => { b: 2 } { a: 1,**h,c: 3 } # => { a: 1,b: 2,c: 3 } h # => { b: 2 } { **h,c: 3 } # => { b: 2,c: 3 } h # => { b: 2,c: 3 } 为了比较,考虑数组上的单*运算符的行为: a = [2] [1,*a] # => [1,2] a # => [2] [1,*a,3] # => [1,2,3] a # => [2] [*a,3] # => [2,3] a # => [2] 阵列保持不变. 我们假设**的有时破坏性的行为是有意的,还是看起来更像一个错误? 在这两种情况下,描述**操作符是如何工作的文档在哪里? 我也问了这个问题in the Ruby Forum. UPDATE Ruby 2.1.3中修复了错误. 解决方法
这个问题的答案似乎是:
>这可能是一个错误,而不是有意的. 感谢几位评论者的建议,我把错误发布到了Ruby trunk issue tracker. 更新: 该错误在changeset r45724修复.该评论是“关键字splat应该是非破坏性的”,这使得这是一个权威的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读