如果您使用哈希,请务必定义一次(作为常量)。
一些基准测试(用于运行时):
#!/usr/local/bin/ruby -w
require 'benchmark'
def by_hash1(i)
{ "option1" => [1,2,3], "option2" => [3,2,1] }[i]
end
TheHash = {
"option1" => [1,2,3],
"option2" => [3,2,1],
}
def by_hash2(i)
TheHash[i]
end
def by_case(i)
case i
when 'option1'
[1, 2, 3]
when 'option2'
[3, 2, 1]
end
end
def by_if(i)
if i.equal?('option1')
[1, 2, 3]
else
[3, 2, 1]
end
end
class Foo
def self.option1
[1, 2, 3]
end
def self.option2
[3, 4, 5]
end
end
N = 10_000_000
Inps = %w{ option1 option2 }
Benchmark.bm(10) do | x |
x.report('by hash1') { N.times { by_hash1(Inps.sample) } }
x.report('by hash2') { N.times { by_hash2(Inps.sample) } }
x.report('by case') { N.times { by_case(Inps.sample) } }
x.report('by if') { N.times { by_if(Inps.sample) } }
x.report('meta') { N.times { Foo.send(Inps.sample) } }
end
给
user system total real
by hash1 11.529000 0.000000 11.529000 ( 11.597000)
by hash2 2.387000 0.000000 2.387000 ( 2.401000)
by case 3.151000 0.000000 3.151000 ( 3.155000)
by if 3.198000 0.000000 3.198000 ( 3.236000)
meta 3.541000 0.000000 3.541000 ( 3.554000)
在我的红宝石 2.0.0p195 (2013-05-14) [x64-mingw32] 上。
请注意,我认为性能通常是次要的。只有当您遇到性能问题时,您才应该开始调查。否则,诸如可读性之类的事情更重要。