有没有更干净的方式写这篇文章? (Ruby/Rails块,返回值)
-
25-09-2019 - |
题
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 }
不隶属于 StackOverflow