В конструкторе часто бывает, что вы хотите превратить аргументы в переменные экземпляра. Наивный способ сделать это:Эффективно ли использовать конструктор splat в конструкторе?
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
, который не был создан в прежнем коде. С точки зрения скорости или эффективности, лучше придерживаться первого, а не использовать последний, или нет никакой разницы?
Рубин достаточно медленно, что дополнительный массив не имеет значения слишком много. * утки * –
не совсем ответ, но я бы предложил написать тестовую программу, которая создает тысячи объектов, используя каждое определение конструктора. сравнение времени для каждого завершения приведет к более быстрой реализации двух реализаций. – ardnew
Я знаю, что вы особенно обеспокоены скоростью, но, учитывая, что второй фрагмент отбрасывает важную информацию (аргументы метода), трудно понять, почему бы написать ее таким образом ... – tokland