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?

Était-ce utile?

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
scroll top