Ruby で #to_s を定義しないで標準出力をカスタマイズする
前回は #to_s
を定義して標準出力をカスタマイズしたのですが、#to_s
を定義しないで標準出力をカスタマイズしてみました。
[コード]
# #to_stdout が定義されていればその戻り値を標準出力する module Output def puts output if output.respond_to? :to_stdout super output.to_stdout else super output end end end module Kernel prepend Output end include Kernel class Person def initialize name, age @name, @age = name, age end def to_stdout "name : #{@name}, age : #{@age}" end end homu = Person.new "homu", 14 puts homu puts "mami"
[出力]
name : homu, age : 14 mami
やってることは至極簡単で、Kernel#puts
を再定義しています。
出力するオブジェクトが #to_stdout
メソッドを定義していればそのメソッドの結果を出力します。
ここら辺の拡張性があるのは Ruby の利点ですね。