こんにちわ、みけです。
前回の記事『Rubyのmixinの話を読んでいたら、何故かjavaを書いていた』はあまりにも
rubyに対して失礼なので、
初心者らしく、ちゃんとmoduleを作ってみました。
ところで、僕の感心事は前回の記事でも書いたように、
rubyのmoduleはインスタンス変数にアクセスすることができるのか?
ということです。
で、結論から言えば、
rubyのmoduleはインスタンス変数にアクセスできました
となります。
moduleを作成
1 2 3 4 5 6 7 8 9 10 | |
moduleのHavingTitleは単純にタイトルというものに
アクセスすることができるモジュールです。
先程も書きましたが、僕の疑問は@titleフィールドに、
インスタンス化することができないmoduleがアクセすることができるのか
ということです。
moduleをincludeしたclassを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
タイトルというものを持っていそうなクラスということで
Bookというクラスをつくりました。
後はBookクラスをインスタンス化して、
フィールド@titleにアクセスできるかどうか確認出来れば
僕の疑問は解決出来ます。
irbで動作を確認
あ、まだrubyでのテストの書き方知らないので、
ここはirbで勘弁して下さい。
1 2 3 4 5 6 | |
というわけで、特に何のエラーも出ることなく、
フィールド@titleにアクセスできているようですね。
モジュールの機能の一つとしてのMix-in
まあ、『初めてのRuby』にはモジュールについて次のように書いてあります。
モジュールはクラスに似ています。モジュールは「インスタンス化できないクラス」のようなものです。
ClassクラスはModuleのサブクラスですから、「クラス = モジュール + インスタンス化能力」と言ってもよさそうです。 (Yugui著『初めてのRuby』(オライリー・ジャパン、2008年、p.159))
Javaしかわからない(Javaも詳しくはわからない)僕には、
abstract classと考えておけばよさそうです。
で、複数のモジュールを継承できるので、
なんか、アレですね…