undefined method (NoMethodError) ruby

后端 未结 3 1886
青春惊慌失措
青春惊慌失措 2020-12-18 01:24

I keep getting the following error message:

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

But I

相关标签:
3条回答
  • 2020-12-18 01:42

    I was getting the same error running Ruby in Eclipse working out the App Academy practice exercises. I forgot to add "object." to the supplied 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 讨论(0)
  • 2020-12-18 01:54

    This is because you are calling method choices, before defining it. Write the code as 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 from the while loop. Otherwise it will create an infinite loop.

    0 讨论(0)
  • 2020-12-18 01:56
    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
    

    The method only needs to be called prior to being executed. Here I wrap the definition in the main method, but only call main after the definition of choices().

    0 讨论(0)
提交回复
热议问题