2010-12-22 15 views
7

我有一個紅寶石腳本下面,無限打印數字從1開始。我怎樣才能讓腳本通過終端中的'Ctrl + C'或'q'鍵停止無限執行?如何將用戶中斷添加到無限循環?

a = 0 
while(a) 
    puts a 
    a += 1 
    # the code should quit if an interrupt of a character is given 
end 

通過每次迭代,都不應該詢問用戶輸入。

+0

事實上,它不會從1打印起。它從0開始打印。 – sawa 2012-10-22 02:14:25

回答

4

我認爲你必須檢查退出條件在一個單獨的線程:

# check for exit condition 
Thread.new do 
    loop do 
    exit if gets.chomp == 'q' 
    end 
end 

a = 0 
loop do 
    a += 1 
    puts a 
    sleep 1 
end 

順便說一句,你將不得不進入q<Enter>退出,因爲這是如何輸入標準的工作。

+0

感謝姆拉登.. !!它正是我正在尋找的。 – boddhisattva 2010-12-24 03:05:49

13

使用Kernel.trap安裝的信號處理程序按Ctrl-C:

#!/usr/bin/ruby 

exit_requested = false 
Kernel.trap("INT") { exit_requested = true } 

while !exit_requested 
    print "Still running...\n" 
    sleep 1 
end 
print "Exit was requested by user\n" 
+1

嗨,彼得!謝謝你的回答,但這不是我正在尋找的。 – boddhisattva 2010-12-24 03:04:47