2017-03-08 5 views
0

Mein Verständnis ist, dass Sie von einem Programm mit einer Rückkehr beenden können. Wie kommst du von einer Schleife zurück? Wenn ich return_method wie folgt ausführen möchte, möchte ich die Schleife mit "RETURNING" zurückgegeben.Rückkehr von einer Schleife von einer anderen Methode

def return_method 
    return "RETURNING" 
end 

loop do 
    puts "Enter:" 
    answer = gets.chomp 
    if answer == 'run' 
    return_method 
    end 
    break if answer == 'y' 
end 

break funktioniert nicht innerhalb meiner Methode.

+0

'zurück return_method'? Oder möchtest du etwas drucken? – Ryan

+0

Ich möchte return_method – norkuy

Antwort

0

Es ist im Allgemeinen nicht der Fall, dass ein Methodenaufruf die aufrufende Methode zwingt, etwas so abruptes wie return zu tun. Dafür gibt es Ausnahmen, sie werden aufblühen, wenn sie nicht erwischt werden, aber das ist für diese Art von Dingen schwerwiegend. macht stattdessen Ihre Methode einen truthy Wert zurück, wenn Sie die Schleife brechen wollen:

def return_method 
    puts "RETURNING" 

    true 
end 

loop do 
    puts "Enter:" 
    answer = gets.chomp 

    case (answer) 
    when 'run' 
    break if return_method 
    when 'y' 
    break 
    end 
end 
+0

Vielen Dank für Ihre Hilfe. Ich versuche, einen besseren Überblick darüber zu bekommen, wie die Rückgabe in Ruby funktioniert, und ich kann online nichts über ihre Arbeitsweise finden. Würdest du zufällig irgendwelche Ressourcen kennen, die ich mir ansehen könnte? Danke noch einmal. – norkuy

+0

'return' kehrt einfach von einer Methode oder einem Block zurück. Es ist nur speziell innerhalb einer "do ... end" -Typstruktur wie in "x.each do ... end". Ein Methodenaufruf hat keine speziellen Regeln, aber Blöcke gibt es in zwei Typen, einen, der eine Rückkehr erlaubt und einen, der nicht erlaubt. Dies ist der Unterschied zwischen "Lambda" und "Proc.new". Ein 'return' in etwas, das mit' Proc.new' deklariert wurde, wird * force-exit, aber nicht in einem 'lambda'. – tadman

1

Eine typische Art und Weise aus verschachtelten Schleifen von zu entkommen aus verschachtelten Methodenaufrufen ist catch zu verwenden ... throw.

RETURNING = "RETURNING" 

def return_method 
    throw RETURNING 
end 

catch(RETURNING) do 
    loop do 
    puts "Enter:" 
    answer = gets.chomp 
    if answer == 'run' 
     return_method 
    end 
    break if answer == 'y' 
    end 
end 
Verwandte Themen