考えてみれば当たり前か。


シリアルポートからの入力を読むread関数が、たまにEOFErrorを投げてくるので無視したい。
しかしEOFError以外は握りつぶしたくない。
色々省略するけど、こういう感じで書いてたんだけど

require 'serialport'
serialport = SerialPort.new("/dev/tty.devicename", 9600, 8, 1, 0)

def read
serialport.read rescue EOFError ## たまに来るEOFErrorだけを無視するつもりだった
end

loop do
puts read
sleep 1
end


こういう実行結果になる。rescueで拾ったEOFErrorがreturnされてた。
EOFError
(デバイスからのデータ)
EOFError
EOFError
(デバイスからのデータ)
EOFError
(デバイスからのデータ)
EOFError


関数readを、こうして1行のrescueで書かないようにすればEOFErrorの時はnilが返る。
def read
begin
result = random_error
rescue EOFError
end
end


nilなので、改行がputsされる

(デバイスからのデータ)


(デバイスからのデータ)

(デバイスからのデータ)