我正面临着一种非常奇怪的行为.这是Ruby 2.6.6,因此循环中的块散列变量不会被冻结.在本例中,source
处于冻结状态.
执行此操作:
result = source.tap { |s| s.delete(:key) }
带回一张不带:key
键的source
.
从理论上讲,这一点也是如此:
result = source.except(:key)
还有这一点:
result = source.dup.tap { |s| s.delete(:key) }
据我所知,上述三种句法的结果是相同的.
然而,在测试(Ruby 2.6.6,Rails 6.0.6.1)中,使用第一种语法的规范成功,而使用后两种语法的规范失败.我不知道是否有必要说明到底是哪一项测试,我只是在寻找一个解释.
对于为什么会发生这种情况,有什么建议吗?
先谢谢你.