[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Extending Array and assigning to self

Oliver Saunders

5/5/2008 11:22:00 PM

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 via http://www.ruby-....

4 Answers

yermej

5/5/2008 11:52:00 PM

0

On May 5, 6:21 pm, Oliver Saunders <oliver.saund...@gmail.com> 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-....

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
end
end

I'm not sure if Array#concat is the best choice here (for some
definition of best), but it'll work.

Oliver Saunders

5/6/2008 12:04:00 AM

0

yermej wrote:
> 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
> end
> end
>
> I'm not sure if Array#concat is the best choice here (for some
> definition of best), but it'll work.

Fantastic yermej. I didn't know about that concat method.

Next point: What if I have a similar problem with strings? I'd like to
achieve this:

# is a string
x = ValueChangeString.new 'foo' #=> 'foo'
# has all the methods of string already
x.length #=> 3
# But also has methods that completely alter the string's value
# whilst remaining the same object
x.change_value! #=> 'bar'
--
Posted via http://www.ruby-....

David A. Black

5/6/2008 1:33:00 AM

0

Hi --

On Tue, 6 May 2008, yermej wrote:

> On May 5, 6:21 pm, Oliver Saunders <oliver.saund...@gmail.com> 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-....
>
> 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.r... for details and updates!

Oliver Saunders

5/6/2008 2:49:00 AM

0

> In general I'd use #replace rather than #clear plus #concat.
>
>
> David

Whoa! That answers the string question. Thanks :-)
--
Posted via http://www.ruby-....