私は次の操作を行うことができます知っている、それはわずか3行だ:私はしません1つのクラスメソッドの別名を付けるより簡単な(1行の)構文がありますか?
class_alias :generate, :new
私は次の操作を行うことができます知っている、それはわずか3行だ:私はしません1つのクラスメソッドの別名を付けるより簡単な(1行の)構文がありますか?
class_alias :generate, :new
Ruby 1.9以降では、singleton_class
メソッドを使用してクラスのシングルトンオブジェクトにアクセスできます。この方法でalias_method
メソッドにアクセスすることもできます。メソッド自体はプライベートなので、send
で呼び出す必要があります。ここにあなたの1つのライナーは次のとおりです。
singleton_class.send(:alias_method, :generate, :new)
はalias
はここで働いていないということ、しかし心に留めておいてください。
:
class << self
alias :generate :new
end
しかし、好奇心から、のような(セミコロンなし)簡単な方法がありますalias
のクラス固有のバージョンがあると考えてください。以前に実証したように私は通常それを使用します。
investigate the differencealias
とalias_method
の間にすることができます。これは、直感的ではないルビのトリッキーな領域の1つです。特に、子孫に関するalias
の動作は、おそらくあなたが期待するものではありません。
希望すると便利です。
素晴らしいリンクありがとう! – AJcodez
私はいくつかのエイリアス方法例
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")
OUTPUTを貼り付けています
I am inside 'simple_method' method
I am parameter_instance_method
I am inside 'class_simple_method'
I am parameter_class_method
楽しい事実: 'DEF self.generate。新しい; end 'と 'class_alias:generate、:new'は同じ文字数です。 –
@AmitKumarGuptaそれは不正なことです、 'def self.generate;新しい; (実際には重要ではなく、できるだけ正確であるように)スタック上に冗長な呼び出しを追加します。 – mudasobwa
@AmitKumarGupta引数を取るには 'new'が必要な場合には動作しません。 – Ajedi32