Ruby 2.6 の変更点 - Module

Ruby2.6アドベントカレンダーの13日目の記事です。

qiita.com

Module

Module#method_defined?, Module#private_method_defined?, Module#protected_method_defined? で継承されたものを含むかどうかを指定可能

https://bugs.ruby-lang.org/issues/14944

メソッドが定義されているかどうかを調べるときに、継承されたものを含むかどうかを第二引数で指定することができるようになりました。

class C
  def hoge
  end
end

C.method_defined?(:hoge)             #=> true
C.method_defined?(:hoge, true)       #=> true
C.method_defined?(:hoge, false)      #=> true
C.method_defined?(:object_id)        #=> true
C.method_defined?(:object_id, true)  #=> true
C.method_defined?(:object_id, false) #=> false

この手のやつは最近はキーワード引数にする流れかと思ってたんだけど、普通のオプション引数なんですね。