Ruby - 2.0.0 の新機能 - Module#prepend
前回に引き続きruby-2.0の新機能を調べてみます。
Module#prepend
です。
Module をインクルードと同じようにMix-Inします。ただし継承関係はインクルード先クラスの子となるように挿入します。
そうすることで、クラスのメソッドを名前も上書きすることができます。
実例でみてみます。継承関係を表示するメソッド Module#ancestors を使うと便利です。
posting.rb
class Posting
def name
@name
end
end
posting_capitalize.rb
require 'posting.rb'
module PostingCapitalize
def name
@name.split(" ").map(&:capitalize).join(" ")
end
end
class Posting
prepend PostingCapitalize
end
実行してみます。
$ irb -I.
> require 'posting_capitalize'
> Posting.ancestors
=> [PostingCapitalize, Posting, Object, Kernel, BasicObject]
> Posting.new("abe shinzo").name