From: Nobuyoshi Nakada Date: 2011-07-31T22:48:52+09:00 Subject: [ruby-core:38626] [Ruby 1.9 - Bug #5124][Assigned] foo = [*bar] implies foo.equal?(bar) Issue #5124 has been updated by Nobuyoshi Nakada. Category set to core Status changed from Open to Assigned Assignee set to Koichi Sasada Target version set to 1.9.3 It's easy to fix that splatarray always makes a new array, but I'm uncertain of its flag. ---------------------------------------- Bug #5124: foo = [*bar] implies foo.equal?(bar) http://redmine.ruby-lang.org/issues/5124 Author: Michael Edgar Status: Assigned Priority: Normal Assignee: Koichi Sasada Category: core Target version: 1.9.3 ruby -v: ruby 1.9.2p188 (2011-03-28 revision 31204) [x86_64-darwin10.7.0] I just ran into this as a result of some slightly sloppy coding, but it did disagree with my internal assumptions. Normally, I expect the Array literal syntax to create a new object, every time. So when I rewrote some code and ended up with something similar to the following, my tests broke, and I'm not sure that's how it should be. Here's the reduced test case: some_ary = [1, 2, 3] bar = [*some_ary] bar << 4 p bar >> [1, 2, 3, 4] p some_ary >> [1, 2, 3, 4] I see it's clearly taking an opportunity for optimization, so I'm more than happy to hear that as a reason for rejecting this. It does warrant documentation somewhere, though, I'd say. Not sure where that documentation would go. -- http://redmine.ruby-lang.org