こんにちわ、みけです。
前回の記事『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
と考えておけばよさそうです。
で、複数のモジュールを継承できるので、
なんか、アレですね…