Why do I get undefined method?

I’m trying to write a script such that when you enter a year, you get
back a result of what occurred in this year or in the range of years, as
follows: http://pastie.org/private/0nibq5i7abwghydfu0yzg

The case is when I enter a year, I get the following:

sub.rb:3: undefined method `what_were_you_doing_on’ for main:Object
(NoMethodError)

But, the method is there. Why am I getting this?

Thanks.

On Tuesday 13 July 2010, Abder-Rahman A. wrote:

|
|Thanks.

Because you call the method (line 3) before defining it (line 6).
Define the
method before calling it and the error will disappear.

Stefano

year == 2001…2006

means is the variable ‘year’ is a range starting with 2001 up to and
including 2006

That is it expects that ‘year’ will be a range and not a fixnum.

What you need is something like this

if (2001…2006).include?(year)

On Jul 13, 2010, at 11:12 AM, Abder-Rahman A. wrote:

Order is important. The method definition has to be evaluated before
calling it.

If you put the call below the method definition, the call will work.

Regards,
Florian G.

Thanks for your replies. I changed the script to look as follows:
http://pastie.org/private/qwcmcpdzvxybm52s3ywxqg

But, I ALWAYS get “Out of range…”. Why is that?

Thanks.

Peter H. wrote:

year = gets

returns a string but your function requires a fixnum

so try

year = gets.to_i

this is one of the few times that you have to explicitly convert
types. It doesn’t happen alot in ruby and each time it catches me out

Thanks a lot Peter, that solves it. And, thanks for you other for your
replies.

On Jul 13, 2010, at 6:16 AM, Abder-Rahman A. wrote:

elsif (2007…2009).include?(year)
puts “MSc”
else
puts “Out of range…”
end
end

puts "Enter year "
year = gets
what_were_you_doing_on (year)

Because gets returns a string (which will still have a newline). So
you’re asking:
(2001…2006).include?(“2003\n”)

Try: year = gets.to_i

-Rob

Rob B.
[email protected] http://AgileConsultingLLC.com/
[email protected] http://GaslightSoftware.com/

Thanks Rob. Yes, the issue seemed .to_i wasn’t there.

year = gets

returns a string but your function requires a fixnum

so try

year = gets.to_i

this is one of the few times that you have to explicitly convert
types. It doesn’t happen alot in ruby and each time it catches me out