Ruby:NoMethodError,我在调用它之前定义了该方法

时间:2012-09-02 21:58:18

标签: ruby nomethoderror

class AiClassGame
    def calculate_cpuNum(sum)
        if sum <= 79
            cpuNum = 80 - sum
        elsif sum <= 88
            cpuNum = 89 - sum
        else
            cpuNum = 100 - sum
        end
        #puts 'calculate method'
    end


calculate_cpuNum是我收到调用错误的方法

if sum >= 71
        calculate_cpuNum(sum)
    else
        sum += cpuNum
        checkPlayer = false
        puts 'sum = ' + sum.to_s
        break if sum >= 100
    end
    puts 'Computer has choosen : ' + cpuNum.to_s, 'sum = ' + sum.to_s
end

我收到错误

ai_class_game.rb:39 in <class:AiClassGame>: undefined methodcalculate_cpuNum` for AiClassGame:Class (NoMethodError)from ai_class_game.rb:7:in `<main>`

1 个答案:

答案 0 :(得分:2)

您将calculate_cpuNum定义为AiClassGame类的实例方法。但是,调用方法的代码直接写在类主体中 - 而不是在实例方法中。

您可以从类体中调用(没有显式接收器)的唯一方法是类方法。实例方法只能从同一个类的其他方法调用,或者使用my_ai_class_game_object.calculate_cpuNum在给定类的对象上调用它们。

我还应该指出,直接在类体中编写代码是非常不寻常的。

您在代码中遇到的另一个无关错误是您在cpuNum方法之外使用calculate_cpuNum变量。 cpuNum是一个局部变量,不能在您定义它的方法之外使用。