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
在上面的代码中,我必须在函数末尾再次放置“users”变量以返回正确的值(用户)。但是,时间块是否可能返回用户值,我可以删除函数末尾的“用户”?
def find_users_online(count = 1)
users = Array.new
count.times.and_return do # <== something like this
users += get_users_online
end
end
答案 0 :(得分:3)
如果get_users_online在调用它时会返回相同的值,那么Lavir的解决方案很好。如果没有,你需要这样的东西:
count.times.map {get_users_online}.flatten
答案 1 :(得分:3)
另一个选项是返回块
returning(users = Array.new) do |users|
count.times { users += get_users_online }
end
答案 2 :(得分:2)
怎么样
def find_users_online(count = 1)
(1..count).map{ get_users_online }.flatten
end
答案 3 :(得分:2)
查看#tap。这是“回归”的新方式。
def find_users_online(count = 1)
[].tap do |users|
count.times { users += get_users_online }
end
end
答案 4 :(得分:0)
get_users_online * count
但get_users_online()在执行此函数时必须返回相同的值。
如果不是这种情况,请使用
(1..count).map { get_users_online }.reduce(:+)
或使用Facets:
count.of { get_users_online }.sum
还有更有趣的方式:
(1..count).inject(Array.new) { |ignore, users| users + get_users_online }