module M # M#itself はないけどaliasを定義できる alias itself2 itself end class C < BasicObject include ::M end # C#itself はないけど呼べる C.new.itself2 method = Object.instance_method(:method) pp method.bind_call(C.new, :itself2) # => #<Method: C(Kernel)#itself2(itself)()>
module内でのaliasで、moduleには存在しないけどObjectには存在するメソッドならaliasを作れるということを知った。
この例ではM#itself
は存在しないけど、Object#itself
は存在するからaliasを作れる。
そしてBasicObjectを継承したクラスでそのモジュールをincludeすると、Kernelのitselfを呼べる。へー。
これはRBSでこういう例がエラーになって、Rubyではどうなんだろうと調べていて知った。
ブログ書いた。 やったことをずらずら書いただけなので読んでもあまり面白くはないと思うのだけど、書くのは楽しかった。