我需要一种检查键盘的方法,看看是否有任何一个按键被按下,如果是,请拿到钥匙,如果没有,请离开并继续我的生意。我只需要检查大约六个键。我将经常返回检查(即,这个检查是程序的一部分,无休止地重复[只要程序正在运行。]或者,我想我也可以实现它作为一个中断,即,其余的循环,然后在按下时获取密钥。
因为get和getc都在等待返回,所以它们对我不起作用。我在java和Windows上找到了例子,但我在Mac上。
答案 0 :(得分:3)
要立即阅读角色而不给tty设备编辑角色并等待返回,你需要这样的东西:
system 'stty cbreak'
$stdout.syswrite 'How now: '
q = $stdin.sysread 1
puts
puts "You typed #{q} it seems."
system 'stty cooked'
要添加对可用字符的检查,请将其扩展为执行非阻塞读取...
def read1maybe
return $stdin.read_nonblock 1
rescue Errno::EAGAIN
return ''
end
system 'stty cbreak'
while true
q = read1maybe
break if q.length > 0
puts 'you did not change anything'
sleep 1
end
puts
puts "You typed #{q} it seems."
system 'stty cooked'
有关更详细的内容,请参阅the standard library curses package.您可能还会发现io/console有用。