2011-01-05 9 views
21

Acabo de pedir un question sobre el retorno y parece hacer lo mismo que romper. ¿Cómo se usa return y cómo se usa break, como en el código real que se escribe para resolver los problemas que pueden usar estos constructos?romper y volver en ruby, ¿cómo los usas?

Realmente no puedo publicar ejemplos porque no sé cómo usarlos para que no tengan mucho sentido.

+1

posible duplicado de [¿Cómo salir de un bloque de rubíes?] (Http://stackoverflow.com/questions/1402757/how-to-break-out-f- a-ruby-block) –

Respuesta

54

Retorno sale de toda la función.

Break sale del bucle más interno.

Por lo tanto, en una función de este modo:

def testing(target, method) 
    (0..100).each do |x| 
    (0..100).each do |y| 
    puts x*y 
    if x*y == target 
     break if method == "break" 
     return if method == "return" 
    end 
    end 
    end 
end 

para ver la diferencia, intentar:

testing(50, "break") 
testing(50, "return") 
+0

ah ha, I ver. buen ejemplo. – s84

+0

de acuerdo, este es un muy buen ejemplo! gracias por la aclaración – wmock

+2

También tenga en cuenta que usar return dentro de un proceso que se está llamando desde dentro de un método también hará que el método regrese. Asegúrese de buscar las diferencias entre lambdas y procs. –

4

descanso se llama desde dentro de un bucle. Te pondrá justo después del bucle más interno en el que te encuentras.

return se llama desde métodos. Devolverá el valor que le indique y lo colocará justo después de donde se lo llamó.

1

Quería editar la respuesta aprobada para simplificar el ejemplo, pero mi edición fue rechazada con la sugerencia de hacer una nueva respuesta. Así que esta es mi versión simplificada:

def testing(target, method) 
    (1..3).each do |x| 
    (1..3).each do |y| 
    print x*y 
    if x*y == target 
     break if method == "break" 
     return if method == "return" 
    end 
    end 
    end 
end 

podemos ver la diferencia tratando:

testing(3, "break") 
testing(3, "return") 

Resultados de primera (break declaración de salir del bucle más interno sólo cuando 3 alcanzó):

1232463 

Resultados de la última (declaración return que sale de la función completa):

123 
0

Un ejemplo más podría ser si tiene dos bucles en un solo método y si desea salir del primer bucle y continuar hasta el segundo descanso uso de bucle en el primer bucle, o viceversa:

def testing(method) 
x=1 
    10.times do 
    if(x == 2) 
    break if method == "break" 
    end 
    x+=1 
    end 
    10.times do 
    if(x == 5) 
    return if method == "return" 
    end 
    x+=1 
    end 
end 
Cuestiones relacionadas