これらの2つの方法が単に同義語である場合、なぜ人々は追加の文字「_chain
」を書くのに苦労するのでしょうか。
2 に答える
いいえ alias_method
。はRubyの標準的な方法です。 alias_method_chain
は、古いメソッドを新しい名前にエイリアスし、次に新しいメソッドを元の名前にエイリアスするという一般的なアクションを簡素化するように設計されたRailsアドオンです。したがって、たとえばmethod
、新しい機能を使用してメソッドの新しいバージョンを作成する場合new_feature
、次の2つのコード例は同等です。
alias_method :method_without_new_feature, :method
alias_method :method, :method_with_new_feature
と
alias_method_chain :method, :new_feature
編集
架空の例を次に示します。メソッドを持つPersonクラスがあるとしrename
ます。「JohnDoe」のような文字列を取得し、スペースで分割して、first_nameとlast_nameにパーツを割り当てるだけです。例えば:
person.rename("Steve Jones")
person.first_name #=> Steve
person.last_name #=> Jones
今、問題が発生しています。適切に大文字化されていない新しい名前を取得し続けます。したがって、新しいメソッドを記述し、これを解決するためrename_with_capitalization
に使用できます。alias_method_chain
class Person
def rename_with_capitalization(name)
rename_without_capitalization(name)
self.first_name[0,1] = self.first_name[0,1].upcase
self.last_name[0,1] = self.last_name[0,1].upcase
end
alias_method_chain :rename, :capitalization
end
さて、古いrename
ものは、と呼ばれrename_without_capitalization
、rename_with_capitalization
ですrename
。例えば:
person.rename("bob smith")
person.first_name #=> Bob
person.last_name #=> Smith
person.rename_without_capitalization("tom johnson")
person.first_name #=> tom
person.last_name #=> johnson
alias_method_chain
メソッド呼び出しの傍受を行う最悪の方法です。同様の手法を探している場合は、レールの外で使用しないでください。