为什么这个Ruby方法需要成为一个类级别的方法?

为什么这个Ruby方法需要成为一个类级别的方法?

问题描述:

这里是一个典型的fizzbuzz在Ruby中:为什么这个Ruby方法需要成为一个类级别的方法?

class PrimeChecker 
    def print_em 
    1.upto 100 do |fizzbuzz| 
     if (fizzbuzz % 2) == 0 && (fizzbuzz % 5) == 0 
     puts "fizzbuzz: " + fizzbuzz.to_s 
     elsif (fizzbuzz % 5) == 0 
     puts "fizz: "+fizzbuzz.to_s 
     elsif (fizzbuzz % 2) == 0 
     puts 'buzz: ' + fizzbuzz.to_s 
     else 
     puts "-" + fizzbuzz.to_s 
     end 
    end 
    end 
end 
PrimeChecker.print_em 

当我执行此,我得到这个错误:

undefined method 'print_em'.

我改变方法self.print_em和它的作品。这是否意味着它是一个类方法(我认为是这样)?之前是“找不到”的方法,因为我只能在类的实际实例上调用这样的方法?如果我希望它成为实例方法,那么它的语法是什么?我试图更好地理解Ruby,类和方法。

类方法就是这样:在类上调用。而实例方法是,该类别的实例是。一个例子更有用:请注意,Ruby中的“类方法”实际上是类对象的单例中的方法。这是一个很难解释的概念,如果你愿意,你可以read more about it

+0

大,它还挺我的想法。接受并且还为示例+1。谢谢! – junky 2012-02-28 16:50:40

+0

woops对不起,我没有15代表所以不能upvote。但我确实接受。 – junky 2012-02-28 16:51:12

+0

丁!现在在15代表。给了upvote! – junky 2012-02-28 16:51:42

是的,你是完全正确的。目前,您定义的方式,你可以评估与方法:

PrimeChecker.new.print_em 

原因def self.my_awesome_method定义它的类方面是因为里面

class MyAwesomeClass 
end 

的东西是在上下文中执行MyAwesomeClass。这是所有Ruby代码,正如你所看到的!这使您能够做这样的事情:

class MyAwesomeClass 
    puts "Hello from innards of #{self}!" #=> Hello from the innards of MyAwesomeClass! 
end 

方法的定义也将只有当你给他们打电话定义部位后,例如工作:

class MyAwesomeClass 
    my_awesome_method # produces a nasty error 
    def self.my_awesome_method 
    puts "Hello world" 
    end 
    my_awesome_method # executes just fine 
end 

希望这将清除一些东西了。

这是不是写成的类方法;你需要用的PrimeChecker一个实例中运行它:

pc = PrimeChecker.new 
pc.print_em 

使用self.把它变成一个类的方法,可运行与你展示的语法。

它不需要需要是一个类方法,它只是这就是你如何执行它。

问:当我运行ruby.rb时,我得到了未定义的方法'print_em'。我将该方法更改为self.print_em,它可以工作。这是否意味着它是一种类方法(我认为是这样)。 A:是的。 class Bar; ... def self.foo为类Bar定义了一个类方法foo。

问:以前的方法“找不到”,因为我只能在类的实际实例上调用这样的方法吗?

答:您首先将其定义为实例方法。在这种情况下,它仅适用于该类的实例。

问:如果我希望它成为一个实例方法,那么它的语法是什么?

答:你有它原始的方法:class Bar; def foo定义例如方法foo类酒吧