我正在尝试编写一个程序,要求用户在三秒内使用gets.chomp
回答问题,否则答案将自动返回false。
我想出除了超时部分以外的一切,我想知道是否有人可以请求帮助。
答案 0 :(得分:8)
您可以使用timeout
标准库
require "timeout"
puts "How are you?"
begin
Timeout::timeout 5 do
ans = gets.chomp
end
rescue Timeout::Error
ans = nil
end
puts (ans || "User did not respond")
详细了解图书馆http://www.ruby-doc.org/stdlib-2.1.5/libdoc/timeout/rdoc/Timeout.html
答案 1 :(得分:0)
您可以使用Kernel::select
编写这样的帮助方法:
def gets_with_timeout(sec, timeout_val = nil)
return gets.chomp if select([$stdin], nil, nil, sec)
timeout_val
end
然后您可以像这样使用它:
puts "How are you?"
ans = gets_with_timeout(5)
puts ans || "User did not respond"
答案 2 :(得分:-6)
我为此写了一些代码。
def question_time
puts "Your question here"
t = Time.now
answer = gets.chomp
Time.now - t > 3 ? false : answer
end