2013-07-15 2 views
-1

속성이 값 : blah로 평가되는 "/a_setting/c\blah = something" 문자열로 끝내고 싶습니다.루비에서 백 슬래시가 문자열 보간을 중단 함

"/a_setting/c\\#{attribute} = something" 

당신은 탈출해야합니다

attribute = "blah"
"/a_setting/c\#{attribute} = something"
=> "/a_setting/c\#{attribute} = something"
"/a_setting/c\ #{attribute} = something"
=> "/a_setting/c blah = something"

+0

무엇이 질문입니까? – sawa

+0

''/ a_setting/c \ blah = something "where attribute gets'"attribute "는 무엇을 의미합니까? – sawa

+0

루비는 문자 그대로 인쇄하기 위해 보간법을 벗어 났다고 생각합니다. 그냥 연결하십시오. '/ a_setting/c \ "+ attribute +"something "' – elclanrs

답변

2

원하는 문자열을 얻으려면 : 그러나, 나는 앞의 백 슬래시 변수의 평가를 중지 보인다 다음과 같은 행동을보고 있어요 백 슬래시로 백 슬래시.

  • 당신이 "\#"

    "#" 탈출하고, 보간 요소로되지 해석됩니다 만, 검사에, 보간 모호성을 피하기 위해 {...} 앞에 "\#"로 나타나는 그대로 "#", 등.
  • "\ "을 입력하면 " "이 (중복하여) 이스케이프 처리되고 " "으로 해석됩니다.
+0

감사하지만, 원하는 문자열은 c :'/ a_setting/c \ # {attribute} = something' 뒤에 하나의 백 슬래시가 있습니다. 역 슬래시를 없애기 위해 백 슬래시를 추가하면, 하나 대신 두 개가됩니다 ('/ a_setting/c \\ # {attribute} = something' 대'/a_setting/c\ # {attribute} = something') –

+2

검사 할 때 백 슬래시를 다른 백 슬래시로 이스케이프 처리해야합니다. "\\"'에는 백 슬래시가 하나만 있습니다. – sawa

1

나는 당신이 무엇을 가리키고 있는지 이해하지 못합니다.

그러나 당신이하려고하는 경우 문자열 평가에 기인, 아마 이것은 당신이 당신이를 추가하여 #{}에 의해 평가를 탈출하는

"/a_setting/c\\#{attribute} = something" 

사촌

"/a_setting/c\#{attribute} = something" 

으로 원하는 것입니다 이스케이프 문자 \

따라서 해석자는 표현식 대신 #{}을 평가합니다.

다른 \ 앞에 다른 문자를 추가하면 다음 문자는 이스케이프 처리되고 일반 문자로 평가됩니다.

"\#{attribute}" #:=> "\{attribute} 
"\\#{attribute}" #;=> "\blah" 
+0

제안 사항이 변경되었습니다. "/ a_setting/c \ # {a_setting/c \ blah = something' (두 개가 아닌 하나의 백 슬래시) –

+0

두 개의 백 슬래시가 아니라 {{}} {attribute} = something ""/ "a_setting/eval 컨텍스트의 [이스케이프 문자] (http://en.wikipedia.org/wiki/Escape_character) –

관련 문제