[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

StackError: stack level too deep

Sebastian Friedrich

3/7/2006 7:27:00 PM

i'm currently learning Ruby. So, while learning about code blocks and
yields i wanted to put my freshly acquired knowledge to the test and
(just to see if i understood correctly) write my own simple each method
for Arrays. so i did:

class Array
def each
for x in self
yield(x)
end
end
end

But running it gives me SystemStackError: stack level too deep. It works
fine when i rename it, so i guess it's just Ruby not appreciating my
fine work or somehow making sure i don't introduce flagrant overwrites
to built-in methods??? Anybody feels like enlightening me on how this
works? Thanks.

--
Posted via http://www.ruby-....


1 Answer

Brian Mattern

3/7/2006 7:45:00 PM

0

On Tuesday 07 March 2006 13:26, Sebastian Friedrich wrote:
> i'm currently learning Ruby. So, while learning about code blocks and
> yields i wanted to put my freshly acquired knowledge to the test and
> (just to see if i understood correctly) write my own simple each method
> for Arrays. so i did:
>
> class Array
> def each
> for x in self
> yield(x)
> end
> end
> end
>
> But running it gives me SystemStackError: stack level too deep. It works
> fine when i rename it, so i guess it's just Ruby not appreciating my
> fine work or somehow making sure i don't introduce flagrant overwrites
> to built-in methods??? Anybody feels like enlightening me on how this
> works? Thanks.

If I'm not mistaken, the "for foo in bar" construct uses the each method. (It
basically gets translated to "bar.each do |foo|"

So, your method now looks like:

def each
self.each do |x|
yield(x)
end
end

This keeps recursing until ruby kills it due to the stack being too deep.

--
Brian Mattern