Log.log(work)

いろんな作業メモ

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クラス自身になる。