コンストラクターでSplatオペレーターを使用することは効率的ですか?

StackOverflow https://stackoverflow.com/questions/9302593

質問

コンストラクターでは、引数をインスタンス変数に変えたいことがよくあります。それを行う素朴な方法は、次のとおりです。

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top