创建一个既作为类又作为实例方法的方法

时间:2014-12-01 23:51:45

标签: ruby oop

我们说我有一个班级,我希望能够在班级本身上调用相同的方法该班级的一个实例:

class Foo
  def self.bar
    puts 'hey this worked'
  end
end

这让我可以做到以下几点:

Foo.bar #=> hey this worked

但我也希望能够做到:

Foo.new.bar #=> NoMethodError: undefined method `bar' for #<Foo:0x007fca00945120>

所以现在我修改我的类以获得bar的实例方法:

class Foo
  def bar
    puts 'hey this worked'
  end
end

现在我可以在类和类的实例上调用bar:

Foo.bar #=> hey this worked
Foo.new.bar #=> hey this worked

现在我的班级Foo已经湿了&#39;

class Foo
  def self.bar
    puts 'hey this worked'
  end

  def bar
    puts 'hey this worked'
  end
end

有没有办法避免这种冗余?

1 个答案:

答案 0 :(得分:2)

有一种方法可以调用另一种方法。否则,不,没有办法避免这种“冗余”,因为 没有冗余。有两种不同的方法碰巧具有相同的名称。

class Foo
  def self.bar
    puts 'hey this worked'
  end

  def bar
    Foo.bar
  end
end