Frage

In einem Konstruktor kommt es häufig vor, dass Sie die Argumente in Instanzvariablen umwandeln möchten. Eine naive Art, dies zu tun, ist:

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

Aber ein einfacher Weg ist:

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

Aber ich war besorgt über die Geschwindigkeit des Code args Das wurde im früheren Code nicht erstellt. Aus Sicht der Geschwindigkeit oder Effizienz ist der Bessere, um sich an den ersteren zu halten und nicht die letztere zu verwenden, oder gibt es keinen Unterschied?

War es hilfreich?

Lösung

Sieht von hier aus gut aus:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top