1

rubyの標準入力から一度に1バイトずつ読み取りたいのですが、新しいデータがない場合は、メソッドをすぐに返すようにしたいので、私が見る限り、each_byteなどはオプションではありません。 、プログラムの実行をブロックするためです。

理想的には、この方法で次のようなことができます。

byte = STDIN.next_byte_or_nil
if(byte)
#Process
else
#Do something else
end

どうすればそれを達成できますか?

4

3 に答える 3

3

読み取り操作がブロックされる場合は、例外read_nonblockをスローする which を使用できます。Errno::WOULDBLOCKしたがってSTDIN.read_nonblock(1) rescue nil、ブロッキングまたはリターンなしでバイトを読み取りますnil

値を使用しnilて呼び出しが成功したかどうかを確認するだけなので、実際には必要ありませんrescue nil

begin
  byte = STDIN.read_nonblock(1)
  #Process
rescue Errno::WOULDBLOCK
  #Do something else
end
于 2013-03-18T12:35:31.873 に答える
0

readbyteを使用して目標を達成してみてください。

于 2013-03-18T12:28:36.197 に答える
0

getcは、探しているメソッドです。

byte = STDIN.getc
if byte
  # Process
else
  # Do something else
end
于 2013-03-18T12:20:25.507 に答える