(그들은 동일하지만 결과는 다릅니다) 다음과 같은 시나리오를 비교 :루비와 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
크루비 에서처럼 jruby에서 왜 실패하지 않습니까? 이것은 jruby 버그입니까?
또 다른 가능성은 IRb의 구현 아티팩트 일 수 있습니다.IRb의 구현은 hackish하고 깨지기 쉽고 (관대하기 때문에) 잘 알려져 있으며 그 행동은 스크립트와 동일한 코드 실행의 동작과 반드시 일치하지 않습니다. 좀 더 잘 알려진 비 호환성의 일부는 최상위 메소드가 사적이어야하고 지역 변수 주위의 이상 함에도 불구하고 공개된다는 것입니다. 그러나 제어 흐름에 대한 몇 가지 차이점이 있다는 것이 의문의 여지가 없습니다. 특히, 당신의 에러 메시지는 당신이 사용하지 않는'eval'에 대해 언급합니다 ... –
... 당신의 코드보다는 IRb 자체의 구현에서 에러가 발생한다는 강한 암시가있는 것 같습니다. –
입력 해 주셔서 감사합니다! Ruby :'Invalid next (SyntaxError)'와 jruby :'LocalJumpError : unexpected next' – Kalsan