在 ruby​​ 类中同时创建同名的实例方法和类方法

Zee*_*Zee 6 ruby ruby-on-rails

有没有办法让我在 ruby​​ 类中同时创建同名的类和实例方法?我在课堂上创建了一个版本Foo

class Foo 
   def self.bar
      "hello world" 
   end

   def bar
     self.class.bar
   end
end
Run Code Online (Sandbox Code Playgroud)

虽然这可行,但是否有更优雅的方法来实现这一目标?现在,我必须复制约 10 个方法作为实例和类方法。

Les*_*ill 3

Forwardable你可以像这样使用 Ruby :

# in foo.rb
class Foo
  extend Forwardable

  def_delegators :Foo, :bar, :baz, :qux

  def self.bar
    "hello bar"
  end

end
Run Code Online (Sandbox Code Playgroud)

然后

> Foo.bar #=> "hello bar"
> Foo.new.bar #=> "hello bar"
Run Code Online (Sandbox Code Playgroud)

你也可以method_missing像这样使用:

> Foo.bar #=> "hello bar"
> Foo.new.bar #=> "hello bar"
Run Code Online (Sandbox Code Playgroud)