0

この問題を説明する方法がわからないため、紛らわしいタイトルで申し訳ありません。

Ruby on Rails コントローラー内で、 という名前のリストを作成しています@commits。各項目に@commitsは、各コミットのさまざまなプロパティの値を要素とするハッシュ テーブルが含まれている必要があります。これらのプロパティ値は Redis データベースに保存されます。

以下では、値を Redis から取得する必要があるプロパティのリストを反復処理し、8 つの異なるコミットのそれぞれについてそれらの値を取得します。次に、コミット プロパティ名をハッシュのキーとして使用して、コミットごとに異なるハッシュ テーブルに redis の値を配置します。

# Initialize @commits as a list of eight empty hash tables
@commits = Array.new(8, {})

# Iterate over the attributes that need hashed for each item in @commits
[:username, :comment, :rev, :repo].each do |attrib|
    # 8 items in @commits
    8.times do |i| 
       # Get a value from redis and store it in @commits[i]'s hash table
       @commits[i][attrib] = $redis.lindex(attrib, i)

       # Print the value stored in the hash
       # Outputs 7, 6, .., 0 for @commits[i][:rev]
       puts @commits[i][attrib].to_s
    end
end

# Print the value of every item that was stored in the hash tables above, 
# but only for the :rev key
# Outputs 0 eight times
8.times do |i|
    puts @commits[i][:rev]
end

ただし、上記のコメントによると、 @commits[0..7] はすべて、数行上に正しく格納されているように見えますが、ハッシュに同じ値があるようです。:rev例としてハッシュ キーを使用すると、最初putsは正しい 7..0 が出力されますが、2 番目putsは数字 0 が 8 回出力されます。

理由を知っている人はいますか?

4

1 に答える 1