私は次のことができることを知っています、そしてそれはたった3行です:
class << self
alias :generate :new
end
しかし、好奇心から、次のような(セミコロンなしの)より簡単な方法はありますか?
class_alias :generate, :new
私は次のことができることを知っています、そしてそれはたった3行です:
class << self
alias :generate :new
end
しかし、好奇心から、次のような(セミコロンなしの)より簡単な方法はありますか?
class_alias :generate, :new
Ruby 1.9以降では、このsingleton_class
メソッドを使用してクラスのシングルトンオブジェクトにアクセスできます。このようにして、メソッドにアクセスすることもできますalias_method
。メソッド自体はプライベートなので、で呼び出す必要がありますsend
。これがあなたのワンライナーです:
singleton_class.send(:alias_method, :generate, :new)
ただし、alias
ここでは機能しないことに注意してください。
エイリアスメソッドの例をいくつか貼り付けています
class Test
def simple_method
puts "I am inside 'simple_method' method"
end
def parameter_instance_method(param1)
puts param1
end
def self.class_simple_method
puts "I am inside 'class_simple_method'"
end
def self.parameter_class_method(arg)
puts arg
end
alias_method :simple_method_new, :simple_method
alias_method :parameter_instance_method_new, :parameter_instance_method
singleton_class.send(:alias_method, :class_simple_method_new, :class_simple_method)
singleton_class.send(:alias_method, :parameter_class_method_new, :parameter_class_method)
end
Test.new.simple_method_new
Test.new.parameter_instance_method_new("I am parameter_instance_method")
Test.class_simple_method_new
Test.parameter_class_method_new(" I am parameter_class_method")
出力
I am inside 'simple_method' method
I am parameter_instance_method
I am inside 'class_simple_method'
I am parameter_class_method
のクラス固有のバージョンはないと思いますalias
。私は通常、あなたが以前に示したようにそれを使用します。
ただし、との違いを調査することをお勧めします。これは、少し直感に反する可能性があるルビーのトリッキーな領域の1つです。特に、子孫に関するの振る舞いは、おそらくあなたが期待するものではありません。alias
alias_method
alias
お役に立てれば!