def find_users_online(count = 1)        
    users = Array.new
    count.times do 
      users += get_users_online
    end
    users # <==== I want to remove this here
  end  

在上面的代码中,IM必须在函数末尾再次将“用户”变量放置,以返回正确的值(用户)。但是,Times Block是否有可能返回用户值,我可以在功能末尾删除“用户”?

  def find_users_online(count = 1)        
    users = Array.new
    count.times.and_return do # <== something like this
      users += get_users_online
    end
  end  
有帮助吗?

解决方案

查看#tap。这是做“返回”的新型方式。

def find_users_online(count = 1)   
  [].tap do |users|
    count.times { users += get_users_online }
  end
end

其他提示

如果GET_USERS_ONLINE将返回相同的值时间,则Lavir的解决方案很好。如果没有,您需要这样的东西:

count.times.map {get_users_online}.flatten

另一个选择是 返回 堵塞

  returning(users = Array.new) do |users|
      count.times { users += get_users_online }
  end

怎么样

def find_users_online(count = 1)
  (1..count).map{ get_users_online }.flatten
end

?

get_users_online * count

但是get_users_online()在执行此功能时必须返回相同的值。

如果不是您的情况,请使用

(1..count).map { get_users_online }.reduce(:+)

或使用面:

count.of { get_users_online }.sum

还有更多有趣的方法:

(1..count).inject(Array.new) { |ignore, users| users + get_users_online }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top