Frage

  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 obigen Code muss IM die Variable "Benutzer" am Ende der Funktion erneut einsetzen, um den richtigen Wert zurückzugeben (Benutzer). Aber ist es möglich, dass der Blockblock der Times die Benutzerwerte zurückgibt und ich "Benutzer" am Ende der Funktion entfernen kann?

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

Lösung

Schauen Sie sich #TAP an. Es ist der neu gefangene Weg, "zurückzukehren".

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

Andere Tipps

Lavirs Lösung ist gut, wenn Get_Users_online denselben Wert zurückgibt, den er aufgerufen wird. Wenn nicht, brauchen Sie so etwas:

count.times.map {get_users_online}.flatten

Eine andere Option ist Rückkehr Block

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

Wie wäre es mit

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

?

get_users_online * count

Aber get_users_online () muss den gleichen Wert zurückgeben, während diese Funktion ausgeführt wird.

Wenn dies nicht Ihr Fall ist, verwenden Sie

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

oder mit Facetten:

count.of { get_users_online }.sum

Es gibt auch interessantere Möglichkeiten:

(1..count).inject(Array.new) { |ignore, users| users + get_users_online }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top