如何超时gets.chomp

时间:2014-12-10 23:28:52

标签: ruby gets

我正在尝试编写一个程序,要求用户在三秒内使用gets.chomp回答问题,否则答案将自动返回false。

我想出除了超时部分以外的一切,我想知道是否有人可以请求帮助。

3 个答案:

答案 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