は(彼らは同じですが、結果は異なります)次のシナリオの比較:rubyとjrubyでbegin-next-endの動作が異なるのはなぜですか?
まず、私はルビーでそれをやるのJRuby上(cruby)
~> irb
irb(main):001:0> begin
irb(main):002:1* begin
irb(main):003:2* puts 1
irb(main):004:2> next
irb(main):005:2> end
irb(main):006:1> puts 2
irb(main):007:1> end
SyntaxError: (irb):4: Can't escape from eval with next
今同じこと:
~> jirb
irb(main):001:0> begin
irb(main):002:1* begin
irb(main):003:2* puts 1
irb(main):004:2> next
irb(main):005:2> end
irb(main):006:1> puts 2
irb(main):007:1> end
1
=> nil
これはcrubyのようにjrubyで失敗しないのはなぜですか?これは厄介なバグですか?
もう1つの可能性は、IRbの実装アーチファクトである可能性があります。IRbの実装はハックで脆弱で(寛大である)、その動作はスクリプトと同じコード実行の動作に必ずしも対応していないことはよく知られています。よりよく知られている非互換性の中には、トップレベルのメソッドがプライベートであるにもかかわらず公開され、ローカル変数に関するいくつかの奇妙なものがあるということもあります。しかし、制御フローについてもいくつかの相違点があることは疑問ではありません。特に、あなたのエラーメッセージには 'eval'と記載されています。これはあなたも使用しません。 –
...あなたのコードではなくIRb自体の実装の中でエラーが発生しているようです。 –
あなたのご意見ありがとうございます! Ruby: 'Invalid next(SyntaxError)'とjruby: 'LocalJumpError:unexpected next' – Kalsan