具体的には以下のコードを書くのに、おや?となっていた。Errno
は環境依存の話になる (ので stub_const
している) 、いちおう手元の MacOS X 10.9 (古い!) での話となる。
it 'accepts rescuing multiple same error code exceptions' do # System dependent error code depends on runtime environment. stub_const('Errno::EAGAIN::Errno', 35) stub_const('Errno::EWOULDBLOCK::Errno', 35) expect_no_offenses(<<-RUBY.strip_indent) begin something rescue Errno::EAGAIN, Errno::EWOULDBLOCK handle_exception end RUBY end
例えば以下のように Errno::EAGAIN::Errno
の値のみ 34
にしようしたら、Errno::EWOULDBLOCK::Errno
まで 34
になる。
stub_const('Errno::EAGAIN::Errno', 34)
stub_const
の使い方を間違っていたかなと、しばし逡巡してログを仕込んだりでもしやと思ったら以下が理由だった。
> Errno::EAGAIN.object_id == Errno::EWOULDBLOCK.object_id => true
もっと書くとこう。
> Errno::EWOULDBLOCK => Errno::EAGAIN
なるほどなあ。