8
私はこのコールを理解しようとしていた。この廃止メソッドを使用していますこれはメソッドの機能を非難する方法はありますか?
deprecate :new_record?, :new?
:
def deprecate(old_method, new_method)
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{old_method}(*args, &block)
warn "\#{self.class}##{old_method} is deprecated," +
"use \#{self.class}##{new_method} instead"
send(#{new_method.inspect}, *args, &block)
end
RUBY
end
を私は本当にここ使われているメタプログラミングを理解していません。しかし、これはnew_record?
メソッドのエイリアシングのもう1つの方法です - 実際にはnew_record?
は使用できますが、使用すると警告が表示されますか?誰でもこの仕組みを説明したいですか?
はい、感謝します願っています。それは理にかなっている。私はまだ得られないただ1つのこと - この構文:<< - RUBY、__FILE__、__LINE__ + 1 "<< - RUBY"がヘレドックを開始する場合、残りの部分は何ですか?この部分:__FILE__、__LINE__ + 1 – Hola
定義を "deprecate"から "alias_method:new_record ?,:new?"に変更した場合、警告メッセージは表示されません。 – Hola
私の知る限りでは、はい。 __FILE__と__LINE__情報は、class_evalのオプションの位置決め引数です。それらがなくて例外が発生した場合、バックトレースは '(eval):3 new_record?'のようなものを含みます。 __FILE__は現在のソースファイルであり、__LINE__は現在の行番号です。したがって、失敗した場合、バックトレースはeval文が定義された場所を示します。 –