Undefined method (NoMethodError) ruby

I get the following error message:

text.rb:2:in `<main>': undefined method `choices' for main:Object (NoMethodError) 

But I can not understand why my method is "undefined":

 puts "Select [1] [2] [3] or [q] to quit"; users_choice = gets.chomp choices(users_choice) def choices (choice) while choice != 'q' case choice when '1' puts "you chose one!" when '2' puts "you chose two!" when '3' puts "you chose three!" end end end 
+6
source share
3 answers

This is because you call the choices method before defining it. Write the code as shown below:

 puts "Select [1] [2] [3] or [q] to quit" users_choice = gets.chomp def choices (choice) while choice != 'q' case choice when '1' break puts "you chose one!" when '2' break puts "you chose two!" when '3' break puts "you chose three!" end end end choices(users_choice) 

I used break to exit the while . Otherwise, it will create an infinite loop.

+15
source
 def main puts "Select [1] [2] [3] or [q] to quit"; users_choice = gets.chomp choices(users_choice) end def choices (choice) while choice != 'q' case choice when '1' puts "you chose one!" break when '2' puts "you chose two!" break when '3' puts "you chose three!" break end end end main 

This method needs to be called only before its execution. Here I wrap the definition in the main method, but only call main after defining the selection ().

+3
source

I got the same error as Ruby in Eclipse, which is developing exercises for practicing App Academy. I forgot to add an "object". to the attached test cases. The following syntax works:

  #!/usr/bin/ruby class Prime # Write a method that takes in an integer (greater than one) and # returns true if it is prime; otherwise return false. # # You may want to use the `%` modulo operation. `5 % 2` returns the # remainder when dividing 5 by 2; therefore, `5 % 2 == 1`. In the case # of `6 % 2`, since 2 evenly divides 6 with no remainder, `6 % 2 == 0`. # More generally, if `m` and `n` are integers, `m % n == 0` if and only # if `n` divides `m` evenly. # # You would not be expected to already know about modulo for the # challenge. # # Difficulty: medium. def primer(number) if number < 2 return false end i = 10 while i > 1 if number > i && number != i if number % i == 0 return false end end i -= 1 end return true end end object = Prime. new # These are tests to check that your code is working. After writing # your solution, they should all print true. puts("\nTests for #primer") puts("===============================================") puts('primer(2) == true: ' + (object.primer(2) == true).to_s) puts('primer(3) == true: ' + (object.primer(3) == true).to_s) puts('primer(4) == false: ' + (object.primer(4) == false).to_s) puts('primer(9) == false: ' + (object.primer(9) == false).to_s) puts("===============================================") 
0
source

All Articles