2
コンストラクタでは、引数をインスタンス変数に変換したいことがよくあります。それを行うには素朴な方法は次のとおりです。スプラット演算子をコンストラクタで使用するのは効果的ですか?
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は余分な配列はあまり重要ではないことを十分に遅いです。 *アヒル* –
本当に答えはありませんが、私は各コンストラクタ定義を使用して何千ものオブジェクトをインスタンス化するテストプログラムを書くことをお勧めします。それぞれの時間を比較して終了すると、2つの実装の方が速くなります。 – ardnew
私はあなたがスピードに特に関わっていることを知っていますが、2番目のスニペットが重要な情報(メソッドの引数)を捨てるとすれば、なぜそれをそのように書くのか分かりません... – tokland