Pregunta

  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  

En el código anterior, IM debe volver a colocar la variable "Usuarios" al final de la función para devolver el valor correcto (usuarios). Pero, ¿es posible que The Times Block devuelva los valores de los usuarios y puedo eliminar "usuarios" al final de la función?

  def find_users_online(count = 1)        
    users = Array.new
    count.times.and_return do # <== something like this
      users += get_users_online
    end
  end  
¿Fue útil?

Solución

Mira #tap. Es la forma nueva de hacer "regresar".

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

Otros consejos

La solución de Lavir es buena si get_users_online devolverá el mismo valor que se llama. Si no, necesitas algo como esto:

count.times.map {get_users_online}.flatten

Otra opción es que regresa bloquear

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

Qué tal si

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

?

get_users_online * count

Pero get_users_online () debe devolver el mismo valor al ejecutar esta función.

Si este no es su caso, use

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

o usar facetas:

count.of { get_users_online }.sum

También hay una manera más interesante:

(1..count).inject(Array.new) { |ignore, users| users + get_users_online }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top