class AddedMethodClass def before_added_method end class << self private def method_added(method_name) puts "method added: #{method_name}" end end def after_added_method; end define_method :add_from_define_method, ->(){} end AddedMethodClass.class_eval do def add_from_class_eval end end
こちらの実行結果は
method added: after_added_method method added: add_from_define_method method added: add_from_class_eval
となります。
2つ疑問点があります。
method_added
はメソッドが追加された時に呼ばれる、とあります。
確かに実行結果を見るとそうなのですが、
method_addedを定義した所は
before_added_method
の後ではないでしょうか?
と、なればbefore_added
が定義された時点ではそもそも
method_addedが定義されておらず、
method added: add_from_define_method method added: add_from_class_eval
この結果になるのではないでしょうか?
もう一つ、method_added
はクラスメソッドに定義する、とありますが、
class << self private def method_added(method_name) puts "method added: #{method_name}" end end
この書き方は特異クラスに定義された特異メソッド?ではないのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/23 11:10
2017/10/23 11:14
2017/10/23 11:38