I'm getting the following error:
sheet.rb:35:in `values': stack level too deep (SystemStackError)
from sheet.rb:35:in `values'
from sheet.rb:53:in `to_s'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:92
The output above is given _in full_. Is Ruby truncating the call stack in this output? If so, how I can I see a larger snapshot of the stack, so I can trace down where the infinite recursion is really happening? If not, why am I getting this error?
Thanks,
Ken
Kenneth McDonald wrote:
I'm getting the following error:
sheet.rb:35:in `values': stack level too deep (SystemStackError)
from sheet.rb:35:in `values'
from sheet.rb:53:in `to_s'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:92
The output above is given _in full_. Is Ruby truncating the call stack in this output? If so, how I can I see a larger snapshot of the stack, so I can trace down where the infinite recursion is really happening? If not, why am I getting this error?
Here's one even shorter:
>> def x; x; end; x
SystemStackError: stack level too deep
from (irb):2:in `x'
from (irb):4
Pretty smart of ruby to avoid a gazillion lines of identical output IMHO
Daniel
Daniel DeLorme wrote:
Kenneth McDonald wrote:
I'm getting the following error:
sheet.rb:35:in `values': stack level too deep (SystemStackError)
from sheet.rb:35:in `values'
/* SNIP */
from sheet.rb:52:in `to_s'
from sheet.rb:92
The output above is given _in full_. Is Ruby truncating the call stack
in this output? If so, how I can I see a larger snapshot of the stack,
so I can trace down where the infinite recursion is really happening? If
not, why am I getting this error?
Here's one even shorter:
>> def x; x; end; x
SystemStackError: stack level too deep
from (irb):2:in `x'
from (irb):2:in `x'
from (irb):4
Pretty smart of ruby to avoid a gazillion lines of identical output IMHO
Daniel
It's nice to see a smart little gem in them thar rubies 
I remmeber how long it took for a C Program to crash from the number of
function calls.... Dang thats a good Ruby.
TerryP.
···
--
Email and shopping with the feelgood factor!
55% of income to good causes. http://www.ippimail.com
Daniel DeLorme wrote:
Kenneth McDonald wrote:
I'm getting the following error:
sheet.rb:35:in `values': stack level too deep (SystemStackError)
from sheet.rb:35:in `values'
from sheet.rb:53:in `to_s'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:52:in `map'
from sheet.rb:52:in `to_s'
from sheet.rb:92
The output above is given _in full_. Is Ruby truncating the call stack in this output? If so, how I can I see a larger snapshot of the stack, so I can trace down where the infinite recursion is really happening? If not, why am I getting this error?
Here's one even shorter:
>> def x; x; end; x
SystemStackError: stack level too deep
from (irb):2:in `x'
from (irb):4
Pretty smart of ruby to avoid a gazillion lines of identical output IMHO
Daniel
To a newcomer, it's sorta nonobvious, however--it turned out the problem was that I'd made a circular reference to 'values' instead of '@values', and the fact that the stack was full of 'values' frames is certainly not obvious from the above.
Ken
A good rule of thumb for avoiding this problem is to name your classes
and your variables after nouns and your methods after verbs.
So instead of having a method "values" that uses the member "@values" --
something pretty much guaranteed to lead to trauma at some point down
the road -- make a method "get_values" or "set_values" or
"initialize_values" or whatever that uses a member called @values.
···
On Fri, 2007-31-08 at 10:35 +0900, Kenneth McDonald wrote:
To a newcomer, it's sorta nonobvious, however--it turned out the problem
was that I'd made a circular reference to 'values' instead of '@values',
and the fact that the stack was full of 'values' frames is certainly not
obvious from the above.
--
Michael T. Richter <ttmrichter@gmail.com> (GoogleTalk:
ttmrichter@gmail.com)
Experts in advanced countries underestimate by a factor of two to four
the ability of people in underdeveloped countries to do anything
technical. (Charles P Issawi)
Although I agree in general (i.e. using verbs for method names) I heavily disagree with your last advice: according to Ruby's convention a getter is named "foo" and a setter "foo=". This is implemented in attr* methods and IMHO it is not advisable to leave this convention.
Also, there are good reasons to use getters instead of instance variables, namely that you get more abstraction (there doesn't necessarily have to be a member variable of that name).
Kind regards
robert
···
On 31.08.2007 03:54, Michael T. Richter wrote:
On Fri, 2007-31-08 at 10:35 +0900, Kenneth McDonald wrote:
To a newcomer, it's sorta nonobvious, however--it turned out the problem was that I'd made a circular reference to 'values' instead of '@values', and the fact that the stack was full of 'values' frames is certainly not obvious from the above.
A good rule of thumb for avoiding this problem is to name your classes and your variables after nouns and your methods after verbs.
So instead of having a method "values" that uses the member "@values" -- something pretty much guaranteed to lead to trauma at some point down the road -- make a method "get_values" or "set_values" or "initialize_values" or whatever that uses a member called @values.
Heh, This is one of the few languages I haven't had that happen to to
me on before.
Lisp, C, C++, Perl... but I haven't caused one of those on _ruby_ before.
Now, if you've really intended to do recursion, try making it tail recursive.
Err... Ruby does optimize for tail recursion, right?
--Kyle
I'm not sure, after some googling it seems that 1.8 doesn't and YARV
might partially optimize.
···
On 8/31/07, Kyle Schmitt <kyleaschmitt@gmail.com> wrote:
Heh, This is one of the few languages I haven't had that happen to to
me on before.
Lisp, C, C++, Perl... but I haven't caused one of those on _ruby_ before.
Now, if you've really intended to do recursion, try making it tail recursive.
Err... Ruby does optimize for tail recursion, right?
Unless I read otherwise, I usually assume that languages don't optimize tail recursion. If you look at typical codebases, using tail recursion instead of some sort of higher-level looping construct, or even a simple basic loop, is really an academic curiosity. It doesn't normally make code clearer or easier to write, and most people, even those who are aware of it, don't use it. (In fact people who really know about it often tend to avoid it because they also know of the overhead induced by function calling.) So why bother optimizing for this case?
Ken
Jano Svitok wrote:
···
On 8/31/07, Kyle Schmitt <kyleaschmitt@gmail.com> wrote:
Heh, This is one of the few languages I haven't had that happen to to
me on before.
Lisp, C, C++, Perl... but I haven't caused one of those on _ruby_ before.
Now, if you've really intended to do recursion, try making it tail recursive.
Err... Ruby does optimize for tail recursion, right?
I'm not sure, after some googling it seems that 1.8 doesn't and YARV
might partially optimize.