1

増分nするたびに、記号キーの最後に印刷してタグ付けしようとしています。nそれは可能ですか?

これはコードのセクションです...

# User info
client = Instagram.client(:access_token => session[:access_token])
@user = Hash.new
@user[:info] = client.user

# User media
@user[:recent_media] = Hash.new
@user[:recent_media][:p1] = client.user_recent_media
# user_recent_media only ever retrieves in 20 out of x image links; x being total profile images

(1..9).each do |n|
  page_max_id = @user[:recent_media][:p<n>].pagination.next_max_id
  return if page_max_id.nil?
  @user[:recent_media][:p<n+1>] = client.user_recent_media(max_id: page_max_id)
end
4

6 に答える 6

4

ここではシンボルを動的に生成しているため、シンボルをキーとして使用することは避けたいと考えています。シンボルはガベージ コレクションされないため、メモリ リークが発生します。文字列に変更できる場合は、文字列補間を行うことができます"p#{n + 1}"。それ以外の場合は、最後に同じことを行う.to_symとうまくいきますが、注意が必要です。

于 2013-10-09T19:19:52.203 に答える
2

確かに、文字列を記号化できます。:"p#{n}"またはを使用してみてください"p#{n}".to_sym

于 2013-10-09T19:19:46.180 に答える
2

:p1, :p2, ... - これらは変数ではなく、シンボルです。次のように、文字列を作成してシンボルにキャストできます。

@user[:recent_media]["p#{n + 1}".to_sym] = ...

シンボルは一度作成されると、ガベージ コレクションを実行できないため、この手法ではメモリ リークが発生する可能性があることを知っておく必要があります。

于 2013-10-09T19:20:05.933 に答える
1
(1..9).each do |n|
  page_max_id = @user[:recent_media]["p#{n}".to_sym].pagination.next_max_id
  return if page_max_id.nil?
  @user[:recent_media]["p#{n+1}".to_sym] = client.user_recent_media(max_id: page_max_id)
end
于 2013-10-09T19:20:16.530 に答える
1

以下を使用できます。

@user[:recent_media][:"p#{n+1}"] = #...

ドキュメントから:

補間によってシンボルを作成することもできます。

:"my_symbol1"
:"my_symbol#{1 + 1}"
于 2013-10-09T19:22:24.187 に答える
0

to_symあなたの友達です!

@user[:recent_media]["p#{n+1}".to_sym] = client.user_recent_media(max_id: page_max_id)
于 2013-10-09T19:20:13.083 に答える