0
  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 必须再次将“users”变量放在函数末尾以返回正确的值(用户)。但是时间块是否有可能返回用户值并且我可以在函数末尾删除“用户”?

  def find_users_online(count = 1)        
    users = Array.new
    count.times.and_return do # <== something like this
      users += get_users_online
    end
  end  
4

5 回答 5

3

如果 get_users_online 在调用时返回相同的值,Lavir 的解决方案就很好。如果没有,你需要这样的东西:

count.times.map {get_users_online}.flatten
于 2010-10-24T16:18:22.587 回答
3

另一种选择是返回

  returning(users = Array.new) do |users|
      count.times { users += get_users_online }
  end
于 2010-10-24T17:07:19.253 回答
2

怎么样

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

?

于 2010-10-24T16:15:28.500 回答
2

查看#tap。这是“回归”的新奇方式。

def find_users_online(count = 1)   
  [].tap do |users|
    count.times { users += get_users_online }
  end
end
于 2010-10-24T17:19:24.673 回答
0
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 }
于 2010-10-24T16:03:24.100 回答