在构造函数中使用splat运算符有效吗



在构造函数中,经常需要将参数转换为实例变量。一个天真的方法是:

class A
    def initialize a, b, c
        @a, @b, @c = a, b, c
    end
end

但更简单的方法是:

class A
    def initialize *args
        @a, @b, @c = args
    end
end

但我担心代码的速度,因为后一个代码似乎正在创建一个前一个代码中没有创建的额外数组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

相关内容

  • 没有找到相关文章

最新更新