Ruby2.0のRefinementsを試す。
http://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.html
Ruby2.0 のRefinementsなる機能を試す。
"クラス拡張の影響範囲を名前空間に限定する" とか。
test_refinements.rb
#!/usr/bin/env ruby # coding:utf-8 module Hoge module Refinements refine String do def say; "My name is #{self.capitalize}!!"; end end refine Integer do def say; "#{self} years old!!"; end end end class Foo using Refinements def initialize(name, age) @name = name @age = age end def say_name name.say end def say_age age.say end attr_accessor :name, :age end end foo = Hoge::Foo.new "hogetaro", 15 puts foo.say_name puts foo.say_age if String::instance_methods.include? :say puts "> String class has :say" else puts "> String class has not :say" end
$ ruby -v ruby 2.0.0dev (2012-11-01 trunk 37411) [x86_64-darwin11.3.0] $ ruby test_refine.rb My name is Hogetaro!! 15 years old!! > String class has not :say
なるほど。