Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Extending Array and assigning to self

Reply
Thread Tools

Extending Array and assigning to self

 
 
Oliver Saunders
Guest
Posts: n/a
 
      05-05-2008
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-forum.com/.

 
Reply With Quote
 
 
 
 
yermej
Guest
Posts: n/a
 
      05-05-2008
On May 5, 6:21 pm, Oliver Saunders <(E-Mail Removed)> 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
end
end

I'm not sure if Array#concat is the best choice here (for some
definition of best), but it'll work.
 
Reply With Quote
 
 
 
 
Oliver Saunders
Guest
Posts: n/a
 
      05-06-2008
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-forum.com/.

 
Reply With Quote
 
David A. Black
Guest
Posts: n/a
 
      05-06-2008
Hi --

On Tue, 6 May 2008, yermej wrote:

> On May 5, 6:21 pm, Oliver Saunders <(E-Mail Removed)> 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!

 
Reply With Quote
 
Oliver Saunders
Guest
Posts: n/a
 
      05-06-2008
> In general I'd use #replace rather than #clear plus #concat.
>
>
> David


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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Changing self: if self is a tree how to set to a different self Bart Kastermans Python 6 07-13-2008 11:19 AM
__autoinit__ (Was: Proposal: reducing self.x=x; self.y=y;self.z=z boilerplate code) falcon Python 0 07-31-2005 05:41 PM
Re: __autoinit__ (Was: Proposal: reducing self.x=x; self.y=y;self.z=z boilerplate code) Ralf W. Grosse-Kunstleve Python 2 07-12-2005 03:20 AM
Proposal: reducing self.x=x; self.y=y; self.z=z boilerplate code Ralf W. Grosse-Kunstleve Python 16 07-11-2005 09:28 PM
__autoinit__ (Was: Proposal: reducing self.x=x; self.y=y;self.z=z boilerplate code) Ralf W. Grosse-Kunstleve Python 18 07-11-2005 04:01 PM



Advertisments