评估懒惰数组?

时间:2014-02-03 13:03:59

标签: ruby arrays lazy-evaluation fog

我使用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,但我真的不需要它。某些特定文档的任何提示/链接?

1 个答案:

答案 0 :(得分:4)

.all是你的朋友。 Fog个集合通常有一个all方法,可以修复您正在使用的延迟加载问题。而不是@service.servers,请使用:

servers = @service.servers.all

servers_old = @service_old.servers.all