Ruby 修正版
http://shinomiya.hatenablog.com/entries/2013/12/24
の修正版。
最後、Bookのオブジェクトが表示されていたのが気になっていたが、
原因はputsが余計なことをしていたらしい。
class Book attr_accessor :author,:title def initialize(args) @author= args[:author] @title=args[:title] args[:library] << self end def to_s "Title:" + @title + ", Author: " + @author end end class Library def initialize @books = [] end def <<(book) @books << book end def to_s "Library contents: \n" + @books.join("\n") end end my_library = Library.new Book.new(:author => "Herman Melville", :title => "Moby-Dick", :library => my_library) Book.new(:author => "Hans Christian Andersen", :title => "The Ugly Duckling", :library => my_library) puts my_library
結果:
Library contents:
Title: Moby-Dick, Author: Herman Melville
Title: The Ugly Duckling, Author: Hans Christian Andersen
memo:
putsは改行がある。
pはデバッグ用の出力メソッド。
Bookクラスの6行目の処理↓
args[:library] << self
でself(ここではBookクラス自身)を引数のlibrary、つまり変数my_libraryにセットしている。
このときの処理はLibraryクラス内の
def <<(book) @books << book end
が呼ばれている。
主な処理はLibraryクラス内の変数bookにオブジェクトをそのままセット。このオブジェクトは呼び出し元を見るとBookクラス自身になる。