2011-01-18 3 views
0

죄송합니다. Ruby가 왜 그렇게 이상하게 인용하고 있습니까? 아니면 이것이 버그일까요?Ruby strange quoting

irb(main):027:0> p eval "\" \+  \\+ \\\+  \\\\+ \\\\\+ \"" 

=> " +  + +  \\+ \\+ " 

또는

irb(main):027:0> puts eval "\" \+  \\+ \\\+  \\\\+ \\\\\+ \"" 

생성

=> +  + +  \+ \+ 

또는 다른 일례를 생성

irb(main):067:0> " \" " =~ Regexp.new(eval("\" \\\" \"")) 
=> 0 

irb(main):068:0> " + " =~ Regexp.new(eval("\" \\\\+ \"")) 
=> 0 
+3

을 실행/평가, 완벽하게 좋은 이것에 대해 예기치 않은? 아니면 대신 무엇을 돌려 주겠습니까? –

+1

문제는 루비의 인용이 아니라는 말입니다. 그것이 어떻게 작동하는지 이해하고 있습니다. 일반적으로 수년 동안 사용 되어온 언어를 다룰 때 상당한 양의 코드가 쓰여졌을 때 핵심적인 부분에 문제가있는 경우 문제는 언어가 아닙니다. . –

+0

@ the Tin Man : "선택이 깨지지 않았 음"이라고도합니다. –

답변

2

\" \+ \\+ \\\+ \\\\+ \"을 쓸 때 " + \+ \+ \\+ "이 표시됩니다. 그런 다음 eval을 사용하여 큰 따옴표로 묶인 다른 문자열을 포함하는이 문자열을 실행합니다. 그러면 + + + \+이됩니다.

\\ =>\
\x =>x (자체 NAO에 대한 nenhum CASO 특별한 코모 \n)

0

루비 탈출이

평가 =이 무엇의 문자열