从实例方法访问类方法

时间:2011-07-01 09:46:56

标签: ruby-on-rails ruby

说我有以下代码

class Monster
  def self.yell
    'i am yelling!'
  end

  def shout_something
    Monster.yell
  end
end

我的yell方法是一种类方法,而shout_something是一种调用yell的实例方法。

做这样的事情有什么本质上的错误吗?例如,从实例方法调用类方法是不是很糟糕?我问,因为它感觉不对,但也许只是因为我是红宝石的新手。

另一方面,我认为做self.yell代替Monster.yell会更有意义,但它不起作用。

1 个答案:

答案 0 :(得分:4)

从实例方法调用类方法没有什么特别的错误。根据您的意图以及您希望人们如何将您的Monster子类化,您可能想要使用它:

def shout_something
    self.class.yell
end

这样子类可以提供他们的yell类方法。