2016-10-03 16 views

答えて

0

あなたは*を使用して配列を掛けることができますが、これは1を変更し、同じハッシュオブジェクトへの参照の配列を作成し、それらのすべてを変更します。私は理解し

def strct(i) 
    { "mwdata" => 1.upto(i).inject([]) do |array| 
     array << { .... } 
    end 
    } 
end 

def strct(i) 
    { "mwdata" => [].tap do |array| 
     i.times do 
     array << { .... } 
     end 
    end 
    } 
end 

または注入:

def strct(i) 
    { "mwdata": [ {...} ] * i } 
end 

を(@mudasobwaはコメントで指摘したように)それは、タップを使用することも可能ですこの質問の理由は、私がしばしば自分がsomethi以下のようなNG:jsonbuilderと同じように動作し、ハッシュ「テンプレート」を作成するために使用することができhash_builder.rb

def strct(i) 
    result = { "foo" => [] } 
    i.times do 
    result["foo"] << "Something #{i}" 
    end 
    result 
end 

クイックグーグルは私にこれを与えました。

+0

これら2つのスニペット**は同等ではありません**。前者は唯一のハッシュを作成し、 'i'回参照し、後者は' i'回の異なるハッシュを作成します。 OPがネストされたハッシュを突然変異させる場合、これは非常に重要な違いです。 – mudasobwa

+0

@mudasobwaそれは本当です。 –

関連する問題