Pregunta

En un constructor, a menudo sucede que desea convertir los argumentos en variables de instancia. Una forma ingenua de hacerlo es:

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

Pero una forma más fácil es:

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

Pero me preocupaba la velocidad del código, ya que parece que este último código está creando una matriz adicional args Eso no fue creado en el código anterior. Desde el punto de vista de la velocidad o la eficiencia, ¿es mejor apegarse al primero y no usar el segundo, o no hay diferencia?

¿Fue útil?

Solución

Se ve bien desde aquí:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top