2015-09-26 316 views
-2

我只是玩弄w/Ruby并尝试创建一个函数,但由于某种原因,它并不按照我认为的方式工作。不知道为什么我有这个问题,但这里是我的代码:未定义的方法NoMethodError

class Script 
    print "Enter a number: " 
    number = gets 

    def random (temp) 
     puts "#{temp}" 
     puts "inside function" 
    end 

    random (number) 
end 

错误:

Script.rb:13:in `<class:Script>': undefined method `random' for Script:Class (NoMethodError) 
from Script.rb:1:in `<main>' 
+2

你认为它会是什么样的方式?我运行它,没有错误。 – songyy

+0

wtf ...太奇怪了。它仍然不工作,我复制粘贴我所有的代码。 – halapgos1

+0

我其实很确定它不工作。现在再试一次。我怀疑它去实际的功能。 – halapgos1

回答

1

问题是,您将random方法定义为实例方法,但在类级别上调用该方法。你有两个选择,以解决这个问题:

使它成为一个类的方法(注意self):

class Script 
    def self.random(temp) 
    puts "#{temp}" 
    puts "inside function" 
    end 

    print "Enter a number: " 
    number = gets 

    random(number) 
end 

或改变方法,首先创建一个实例(注意new):

class Script 
    def random(temp) 
    puts "#{temp}" 
    puts "inside function" 
    end 

    print "Enter a number: " 
    number = gets 

    new.random(number) 
end 
+0

很酷,谢谢你的解释!像魅力一样工作。 :) – halapgos1

0

random是一个实例方法,而不是一个类的方法,使你的脚本提出NoMethodError,你应该创建一个Script类的对象,然后调用随机方法。

class Script 
    print "Enter a number: " 
    number = gets 

    def random (temp) # it is a instance method. 
     puts "#{temp}" 
     puts "inside function" 
    end 

    Script.new.random(number) 
end 

或将random方法定义为类方法。

class Script 
    print "Enter a number: " 
    number = gets 

    def self.random (temp) # define random as a class method 
     puts "#{temp}" 
     puts "inside function" 
    end 

    random(number) 
end 
相关问题