the code of Programming Ruby 1.9 & 2.0