Ruby アクセサメソッドの速度
いろいろいじってると attr_reader を使って定義した getter は速いってことに気が付いた.
class Hello attr_reader :message end class Hello2 def message() @message end end def test(obj) start = Time::now 0.upto(2000000){ obj.message } puts "#{obj.class} : #{(Time::now - start)}" end test(Hello::new) test(Hello2::new)
こんなコードを走らせると下のような結果になる.なんでだろうか?
Hello : 2.348104 Hello2 : 4.371438