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 回答