この問題を説明する方法がわからないため、紛らわしいタイトルで申し訳ありません。
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 回出力されます。
理由を知っている人はいますか?