Est-il efficace d'utiliser un opérateur de floc dans un constructeur?
-
25-10-2019 - |
Question
Dans un constructeur, il arrive souvent que vous voulez transformer les arguments en variables d'instance. Une façon naïve de le faire est:
class A
def initialize a, b, c
@a, @b, @c = a, b, c
end
end
mais un moyen plus facile est:
class A
def initialize *args
@a, @b, @c = args
end
end
Mais je préoccupé par la vitesse du code, car il semble que le dernier code crée un tableau args
supplémentaire qui n'a pas été créé dans l'ancien code. Du point de vue de la vitesse ou efficienty, est mieux coller à l'ancienne et ne pas utiliser celui-ci un, ou est-il pas de différence?
La solution
On dirait bien d'ici:
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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow