From: Hal Fulton Date: 2003-08-29T00:48:56+09:00 Subject: #collect with block modifying receiver Hello, all... I'm wondering what should be the behavior of collect when the block modifies the receiver. I don't recall thinking about this before, but I would have said that the collect always returns as many items as the array had at the time of the call. Has this somehow changed since 1.6.*? The reason I ask is the email (below) I got from Jonathan Lim. The randomize methods on page 152/153 of _The Ruby Way_ do not work. It's possible they never did, but I find that hard to believe. I don't have an old Ruby around, or I'd test it. The original line in randomize, of course, read as follows: arr.collect { arr.slice!(rand arr.length) } Thanks to you who reply, and thanks again to Jonathan. Cheers, Hal -------- Original Message -------- Subject: Randomizing an Array Errata? Date: Thu, 28 Aug 2003 15:12:45 +0100 From: Jonathan Lim To: hal9000@hypermetrics.com Hi, On p.153 of the Ruby Way Should it not read this? def randomize arr = self.dup self.collect { arr.slice!(rand arr.length) } end def randomize! arr = self.dup result = self.collect { arr.slice!(rand arr.length) } self.replace result end Cheers, Jon