Domanda

  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  

Nel codice precedente im deve rimettere la variabile "utenti" alla fine della funzione per restituire il valore corretto (utenti). Ma è possibile che i tempi di blocco restituisce i valori degli utenti e posso rimuovere "utenti" alla fine della funzione?

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

Soluzione

Scopri #tap. E 'il modo nuovo conio di fare "il ritorno".

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

Altri suggerimenti

La soluzione di Lavir è buono se get_users_online restituirà lo stesso valore molto tempo si chiama. In caso contrario, è necessario qualcosa di simile:

count.times.map {get_users_online}.flatten

Un'altra opzione è il ritorno blocco

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

Come su

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

get_users_online * count

Ma get_users_online () deve restituire lo stesso valore durante l'esecuzione di questa funzione.

Se questo non è il vostro caso, quindi usare

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

o utilizzando Sfaccettature:

count.of { get_users_online }.sum

C'è anche modo più interessante:

(1..count).inject(Array.new) { |ignore, users| users + get_users_online }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top