Ist es sprechend, einen Splat -Operator in einem Konstruktor zu verwenden?
-
25-10-2019 - |
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?
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