saw*_*awa 4 ruby constructor splat ruby-1.9.3
在构造函数中,经常会发生将参数转换为实例变量的情况。一个简单的方法是:
class A
def initialize a, b, c
@a, @b, @c = a, b, c
end
end
Run Code Online (Sandbox Code Playgroud)
但更简单的方法是:
class A
def initialize *args
@a, @b, @c = args
end
end
Run Code Online (Sandbox Code Playgroud)
但是我担心代码的速度,因为看起来后者的代码正在创建一个额外的数组args,而前一个代码并未创建该数组。从速度或效率的角度来看,坚持前者而不使用后者是更好的选择,还是没有区别?
从这里看起来不错:
RUBY_VERSION # => "1.9.3"
def set_each(a,b,c)
a2, b2, c2 = a, b, c
end
def set_ary(*args)
a2, b2, c2 = args
end
def time(n)
start_time = Time.now
n.times { yield }
Time.now - start_time
end
n = 1_000_000
time(n) { set_each 1, 2, 3 } # => 0.301268
time(n) { set_ary 1, 2, 3 } # => 0.308298
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |