簡體   English   中英

未定義的方法(NoMethodError)ruby

[英]undefined method (NoMethodError) ruby

我一直收到以下錯誤消息:

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

但我似乎無法理解為什么我的方法是“未定義的”:

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

這是因為在定義方法之前,您正在調用方法choices 編寫如下代碼:

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)

我用break來退出while循環。 否則它將創建一個無限循環。

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

該方法只需在執行之前調用。 這里我在main方法中包裝了定義,但是在choice()的定義之后只調用main。

我在Eclipse中運行Ruby時遇到了同樣的錯誤,正在進行App Academy練習練習。 我忘了添加“對象”。 提供的測試用例。 以下語法有效:

      #!/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("===============================================")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM