Question

  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  

Dans le code ci-dessus im revête la variable « utilisateurs » à nouveau à la fin de la fonction pour renvoyer la valeur à droite (utilisateurs). Mais est-il possible que les temps de bloquer le retour des valeurs des utilisateurs et je peux supprimer les « utilisateurs » à la fin de la fonction?

  def find_users_online(count = 1)        
    users = Array.new
    count.times.and_return do # <== something like this
      users += get_users_online
    end
  end  
Était-ce utile?

La solution

Consultez #tap. Il est la nouvelle fangled façon de le faire « retour ».

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

Autres conseils

La solution de Lavir est bon si get_users_online retournera la même valeur moment même où elle est appelée. Sinon, vous avez besoin quelque chose comme ceci:

count.times.map {get_users_online}.flatten

Une autre option est retour bloc

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

Qu'en est-

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

get_users_online * count

Mais get_users_online () doit retourner la même valeur lors de l'exécution de cette fonction.

Si ce n'est pas votre cas puis utilisez

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

ou en utilisant Facettes:

count.of { get_users_online }.sum

Il y a aussi beaucoup plus intéressant:

(1..count).inject(Array.new) { |ignore, users| users + get_users_online }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top