2012-03-09 107 views
1

我有一個Ruby腳本,看起來像:如何在命令行腳本中中斷循環,但僅在方法結束後才中斷循環?

def big_function 
    puts "starting..." 
    #does stuff 
    puts "done" 
end 

loop do 
    big_function 
end 

它運行下去,執行​​。

我需要一種方式讓用戶中斷正在運行的腳本,但從不在​​的中間。如果在​​正在運行時中斷,則應在​​完成時退出。

+0

只是指導他們按Ctrl + C – Candide 2012-03-09 17:20:04

+0

不會它的函數退出之前完成? – applechief 2012-03-09 17:20:55

+0

是的,它會的。也許中斷腳本不是你想要的。誰將使用這個腳本(保存或新手用戶)? – Candide 2012-03-09 17:25:41

回答

2

您可以使用標誌。您可以在用戶的​​按鍵觸發中進行單獨的進程輪詢,並且他可以單擊或按下標記更改狀態的鍵。退出前您必須檢查國旗。

flag = false 

t = Thread.new() { 
    loop do 
    flag = gets 
    break if flag 
    end 
} 

def big_function 
    puts "starting..." 
    #does stuff 
    puts "done" 
end 

loop do 
    break if flag 
    big_function 
end 
4

Trap做的是:

interrupted = false 
trap("INT") { interrupted = true } # traps Ctrl-C 
puts 'Press Ctrl-C to exit' 

def big_function 
    puts "starting..." 
    sleep 1 
    puts "done" 
end 

until interrupted do 
    big_function 
end 
+0

+1我也是這麼做的。 – 2012-03-09 18:56:09