Differences between literals and constructors? ([] vs Array.new and {} vs Hash.new)

Viewed 4061

I was curious to know more differences between [] and Array.new and {} and Hash.new

I ran same benchmarks on it and seems like the shorthands are winners

require 'benchmark'

many = 500000

Benchmark.bm do |b|
  b.report("[]          \t") {many.times { [].object_id }}
  b.report("Array.new   \t") { many.times { Array.new.object_id }}
  b.report("{}          \t") {many.times { {}.object_id }}
  b.report("Hash.new\t") { many.times { Hash.new.object_id }}
end


                  user     system      total        real
[]            0.080000   0.000000   0.080000 (  0.079287)
Array.new     0.180000   0.000000   0.180000 (  0.177105)
{}            0.080000   0.000000   0.080000 (  0.079467)
Hash.new      0.260000   0.000000   0.260000 (  0.264796)

I personally like to use the shorthand one's [] and {} , the code looks so cool and readable.

Any other pointer what is the difference between them? what happens behind scene that make it so better, and suggestions if any when to use which?

I found this link but was looking to get more info.

cheers.

3 Answers
Related