모든 언어로 믿을 수 있고 모호하지 않게 해석하는 것은 쉽지 않습니다. 예약어를 사용하기 시작할 때 특히 그렇습니다. 그리고 irb
은 그 이상으로 파서의 상단에 대화 형 모델을 제공해야합니다.이 모델은 더 어렵습니다. 저는 개인적으로 언어 사용자 나 관리자로서 걱정하는 것에 너무 많은 가치가 있다고 생각하지 않습니다. 내 마음 속에서, 단순히 작동하는 것을 알아 내고 가능한 경우 이러한 상황에 빠지지 않는 것이 좋습니다.
평범한 루비에서는 irb
외부에서 비슷한 동작을 볼 수 있습니다. 예를 들어 :
puts({if: true}) # no problem, behaves as expected in Ruby 1.9.3.
puts {if: true} # raises a syntax error in Ruby 1.9.3
가 귀하의 질문에 대답하려면, "예상 된 동작, 버그 또는 제한"을, 나는 당신이 irb
을 무시하고 일반 루비와 비교해야한다고, 그리고 것입니다 당신은이 작업을 수행 할 경우, 그것을 잘 작동합니다. 즉, irb
버그 여야합니다.
하지만 해결할 가치가 있습니까? @coreyward는 이 if
을 만날 때 대부분의 경우 실행을 지연해야한다는 그의 의견에 좋은 점을 제시합니다. 확실하게 알기 위해서는 더 자세히 살펴야하지만, 이와 같은 모든 경우를 모호하지 않게 해석 할 수는 없습니다.
내 조언 : 가능한 경우이 구문을 모두 사용하지 마십시오. 사용하지 않을 경우 레이블에 예약어를 사용하지 마십시오!
다음은 일반 Ruby (예 : MRI)에서 실행할 수있는 파일입니다. 출력에 {:if=>true}
이 나타나야 제대로 작동하는지 확인할 수 있습니다.
{if: true}
foo = {if: true}
# if MRI is working, should be able to execute this file without trouble.
p foo
'irb'는 약간 약해서 상당한 양의 뇌 손상이 있습니다. 아마도 그 중 일부가 보일 것입니다. –
@muistooshort 매우 근거없는 것 같습니다. 'echo 'puts {if : true} .inspect'> test.rb; ruby test.rb'는 다음을 반환합니다 :'test.rb : 1 : 예기치 않은 구문 오류 ':''irb'는 어떤 식으로 깨지기 쉽니 까? – nzifnab
@nzifnab Irb는 'end'까지 명령문 실행을 보류해야하며, 제어 연산자를 잘못 해석하면 (여기 에서처럼) 고유 한 추가 문제가 있습니다. – coreyward