Очень эффективно использовать оператора SPLAT в конструкторе?
-
25-10-2019 - |
Вопрос
В конструкторе часто случается, что вы хотите превратить аргументы в переменные экземпляра. Наивный способ сделать это:
class A
def initialize a, b, c
@a, @b, @c = a, b, c
end
end
Но более простой способ:
class A
def initialize *args
@a, @b, @c = args
end
end
Но я был обеспокоен скоростью кода, так как похоже, что последний код создает дополнительный массив args
Это не было создано в бывшем коде. С точки зрения скорости или эффективности, лучше ли придерживаться первого и не использовать последний, или нет никакой разницы?
Решение
Отсюда выглядит нормально:
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
Не связан с StackOverflow