【问题标题】:Evaluation of lazy arrays?惰性数组的评估?
【发布时间】:2014-02-03 13:03:59
【问题描述】:

以下代码使用 Fog 从 Rackspace 获取服务器列表时遇到问题 - 我正在将新一代服务器与旧一代服务器连接起来。

def servers()
  servers = @service.servers
  servers_old = @service_old.servers
  size = servers.length + servers_old.length # line 4
  all_servers = servers + servers_old # line 5
  servers = all_servers.sort_by { |k| k.name}
  return servers
end

如果第四行被注释掉,该方法只返回service.servers 数组。第五行中的连接不会发生。在我看来,数组 service.serversservice_old.servers 在我明确要求它们之前有点懒惰。

使用未注释的第四行,该方法返回串联数组,这是我所期望的。如果这些数组是惰性的,是否有任何推荐的方法来评估它们?现在我只是在使用length,但我真的不需要它。某些特定文档的任何提示/链接?

【问题讨论】:

  • 数组在 ruby​​ 中不是惰性的。你的@service 对象是什么?
  • 雾集合是延迟加载的。请稍等。

标签: ruby arrays lazy-evaluation fog


【解决方案1】:

.all 是你的朋友。 Fog 集合通常有一个 all 方法,可以解决您遇到的延迟加载问题。而不是@service.servers,使用这个:

servers = @service.servers.all

servers_old = @service_old.servers.all

【讨论】:

  • 。一切都很好。您能否分享一些信息,我如何使用 Ruby 中的自省来推断这一点?
  • Fog 有时是一种善变的野兽,我刚刚花了很多时间在 Fog 中阅读/写东西,所以我了解了它的一些细微差别。找出某些独特方法的最佳方法是 @service.servers.methods - Object.methods,它将显示 Fog::Rackspace::Servers 集合中不属于标准 Ruby Object 的所有方法。
猜你喜欢
  • 2014-02-08
  • 2013-03-11
  • 2017-01-18
  • 2018-11-11
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多