includeとextend
写経中に
class MyQueue extend MyForwardable
と書いたら実行時に怒られた。
class MyQueue extend MyForwardable
こう書いたら大丈夫だった。
何でってことで調べてみたらextendはself#extendと等価とのこと。
Objectクラスのインスタンスメソッドのようだ。そりゃクラス名のところに続いて書いたら怒られるよな、ってことで納得。
id:yuki_neko_nyanにその話をしたら「includeと何が違うんだろう?」とつぶやいて去っていった。
調べてみたらオンラインマニュアルに以下のような記述をみつけた。
includeは、クラス(のインスタンス)に機能を追加しますが、 extendは、ある特定のオブジェクトだけにモジュールの機能を追加したいときに使用します。 ・・・(略)・・・ extend の機能は、「特異クラスに対する include」と言い替えることもできます。
「クラスのインスタンス」と「特定のオブジェクト」の違いらしい。