From: Daniel Lucraft Date: 2007-07-18T04:41:28+09:00 Subject: Re: Undefined Method confusion - Ruby Newbie (I know it rhym Kaldrenon wrote: > Hi all. > > I recently got into challenging myself with some of the tasks over at > Project Euler (www.projecteuler.net), and while working on the > solution for one of them (# 14) I came across a Ruby problem. Now, I'm > pretty sure that this is just a dumbness on my part, but I don't know > how to fix this problem because I see no differences between my code > and the examples at http://www.whytheluckystiff.net/ruby/pickaxe/ for > declaring and calling methods. > > Here's the code (it's tiny so I'll copy the whole thing): > > class Test > def series(n,x) > if (n == 1) > return x > elsif (n % 2 == 0 ) > return sequence(n/2, x + 1) > else > return sequence(3*n + 1, x + 1) > end > end > > max_num = 1 > max_len = 1 > for i in 2...1_000_000 do > my_len = series(i,1) > if (my_len > max_len) > max_len = my_len > max_num = i > end > end > print max_num , ": chain of length " , max_len > end > > The error I'm getting is this: > undefined method `series' for Test:Class (NoMethodError) > from euler14.rb:14:in `each' > > I see no clear reason why I'm getting this error. Can you un-dumb me? > > Thanks in advance, > Andrew I enjoy Project Euler too. The error you are getting here is because the method 'series' is an instance method, i.e.: > a = Test.new > a.series #=> calls method > Test.series #=> gives missing method error The 'for' loop is executing in the context of the class definition, so it is looking for a class method. The error message indicates that it is looking for the method on Test:Class. You can either turn 'series' into a class method: class Test def self.series ... or you can move the for loop out of the class and create a test object: class Test def series ... end end t = Test.new max_num = 1 max_len = 1 for i in 2...1_000_000 do my_len = t.series(i, 1) ... Incidentally, in the code you gave there's no method called 'sequence'. Is it possible you meant 'series' there too? best, Dan -- Posted via http://www.ruby-forum.com/.