From: "David A. Black" Date: 2008-05-06T10:33:28+09:00 Subject: Re: Extending Array and assigning to self Hi -- On Tue, 6 May 2008, yermej wrote: > On May 5, 6:21 pm, Oliver Saunders wrote: >> I've got this class that is essentially an array with a few things >> added. Here's some of it: >> >> class Pages >> >> def initialize >> @content = [] >> end >> >> def import(file, page_delimiter = ' ') >> @content = file.read.split page_delimiter >> self >> end >> >> def [](num) >> @content[num] >> end >> >> def <<(page_content) >> @content << page_content >> end >> >> ... >> >> Because I'm basically reimplementing Array I thought it might me more >> sense to inherit from Array or delegate to Array. The trouble is that I >> need to assign to @content. How do you suggest I get round this problem? >> -- >> Posted viahttp://www.ruby-forum.com/. > > I would just use Array's own methods. E.g.: > class Pages < Array > def import(file, page_delimiter = ' ') > self.clear > self.concat file.read.split.page_delimiter That's actually a space before page_delimiter, not a dot. Or: file.read.split(page_delimiter) just to be sure :-) > end > end > > I'm not sure if Array#concat is the best choice here (for some > definition of best), but it'll work. In general I'd use #replace rather than #clear plus #concat. David -- Rails training from David A. Black and Ruby Power and Light: INTRO TO RAILS June 9-12 Berlin ADVANCING WITH RAILS June 16-19 Berlin INTRO TO RAILS June 24-27 London (Skills Matter) See http://www.rubypal.com for details and updates!