From: Ian Macdonald Date: 2003-07-04T18:54:10+09:00 Subject: purpose of replace method Hi, I was just wondering what the methods Array#replace, Hash#replace and String#replace achieve that can't be done with simple assignment. I'm going to have a guess and say that assignment of an array, a hash or a string to an already assigned variable creates a second object and then changes the variable to point to the new object, whereas the replace method does not cause a second object to be instantiated, but simply wipes out the old one. If my guess is right, then replace is there simply for the sake of efficiency, in the same way that foo << bar is better than foo += bar. Well, I've just decided to put my theory to the test: #!/usr/bin/ruby -w require 'benchmark' include Benchmark n = 5000000 bm(12) do |test| test.report('assignment:') do foo = "bar" 1.upto(n) do foo = "foo" end end test.report('replacement:') do foo = "bar" 1.upto(n) do foo.replace("foo") end end end user system total real assignment: 8.210000 0.000000 8.210000 ( 8.202920) replacement: 12.240000 0.010000 12.250000 ( 12.257115) So, it would seem that replacement is 50% less efficient than simple assignment. What, then, is the purpose of the replace method? Ian -- Ian Macdonald | Far duller than a serpent's tooth it is to System Administrator | spend a quiet youth. ian@caliban.org | http://www.caliban.org | |