StackError: stack level too deep


#1

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.


#2

On Tuesday 07 March 2006 13:26, Sebastian F. wrote:

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.