2017-03-08 106 views
0

我的理解是您可以退出程序並返回。你如何從循環中返回?當我運行如下所示的return_method時,我想退出循環,返回"RETURNING"從不同方法的循環返回

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在我的方法中不起作用。

+0

'return return_method'?或者你想打印一些東西? – Ryan

+0

我想返回return_method – norkuy

回答

0

通常情況下,方法調用不會強制調用方法做一些像return那樣突變的事情。這就是例外情況,如果沒有發現它們會冒泡,但這對於這類事情來說是嚴重的。相反,讓你的方法返回一個值truthy如果你想打破循環:

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

感謝您的幫助。我試圖更好地處理Ruby中的回報如何工作,並且我無法在線找到有關它們如何工作的任何信息。你會碰巧知道我可以看看的任何資源嗎?再次感謝。 – norkuy

+0

'return'只是從方法或塊返回。它只是在'do ... end'類型結構中特別的,例如'x.each do ... end'。方法調用沒有特別的規則,但塊有兩種類型,一種允許「返回」和一種不允許的。這是'lambda'和'Proc.new'之間的區別。在'Proc.new'聲明的內部'return'會強制退出,而不是'lambda'。 – tadman

1

從從嵌套的方法調用嵌套循環逃跑的典型方法是使用catch ... 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