2016-07-30 21 views
0

我想提示用戶按ESC或任何其他鍵。按下ESC將停止所有進一步的操作。按ENTER(或任何其他鍵)將執行其他操作。Ruby:gets.chomp 1 keypress

按ENTER工作正常,但得到等待用戶實際按回車。使它不是很友善。

用戶在1次按鍵後有沒有辦法繼續?

puts "Press Enter to continue or ESC to quit..." 
decision = gets.chomp 

if decision != "^[" 
    then puts "do this stuff" 
else 
    puts "bye" 
end 

回答

1

我相信你很難理解你在做什麼。首先,它取決於你使用的操作系統。我知道沒有一個適用於所有操作系統的「標準」機制。

二次,比較針對串,包含兩個字符,'^''['絕不是一樣針對檢查ESC

最後但並非最不重要的:gets正在緩衝輸入,除非被按下。你需要閱讀一個字符是IO#getc

這裏是工作的代碼UNIX控制檯:

puts "Press Enter to continue or ESC to quit..." 
begin 
    system("stty raw -echo") 
    decision = STDIN.getc 
ensure 
    system("stty -raw echo") 
end 

if decision.ord != 27 
    puts "do this stuff" 
else 
    puts "bye" 
end 
+0

你說得對。仍在學習。感謝您闡述您的推理,這對了解「爲什麼」有很大幫助。 –

+0

隨時歡迎。 – mudasobwa