15

次のクラスを検討してください。

class Foo
  def an_inst_method
    'instance method'
  end

  def self.a_class_method
    'class method'
  end

  alias_method :a_new_inst_method, :an_inst_method
end

これは問題ありませんFoo.new.a_new_inst_method。問題なく通話できます。

次のようなクラスメソッドをFoo.add_widget(*items)作成してエイリアスを作成できるようにしたいので、次のようなことができます。

Foo.add_widget 'item1'
Foo.add_widgets 'item2', 'item3'

したがって、本質的には「ルビースタイル」のようなもの1.minute2.minutesあるため、エイリアスを作成したいFoo.add_widgetので、Foo.add_widgets呼び出しはまったく同じメソッドを呼び出します。ラップできることはわかっていますが、これをよりクリーンな方法で行うことができるはずだと感じています.

このようなことをしようとする私の試みを考えてみましょう:

class Foo
  def an_inst_method
    'instance method'
  end

  def self.a_class_method
    'class method'
  end

  alias_method :a_new_inst_method, :an_inst_method
  alias_method :a_new_class_method, :a_class_method
end

ただし、次のエラーが表示されます。

NameError (undefined method `a_class_method' for class `Foo')

そのため、これはクラス メソッドでは機能しないようです。どうすればこれを行うことができますか?

4

5 に答える 5