작은따옴표 문자열의 백슬래시와 백슬래시 비교큰따옴표로 묶인 문자열

StackOverflow https://stackoverflow.com/questions/648156

문제

큰따옴표와 작은따옴표 문자열의 시작 부분에 백슬래시+공백을 추가하면 다른 결과가 나타납니다.

"\ text"
'\ text' 

큰따옴표로 묶인 문자열의 출력에는 공백만 표시됩니다.
작은따옴표로 묶인 문자열의 출력에는 백슬래시+공백이 표시됩니다.

무슨 일이 일어나고 있는 걸까요?이 때문인가? '\ ' 큰따옴표 문자열에서는 특수 문자로 해석되지만 작은따옴표 문자열에서는 문자가 그대로 유지됩니까?

문자열을 이렇게 변경하면 동일한 출력, 즉 슬래시 하나와 공백, 텍스트가 차례로 표시됩니다.

"\\ text"
'\\ text' 

두 경우 모두 백슬래시가 이스케이프됩니다.이 상황에서 왜 같은 방식으로 작동하는지 혼란 스럽습니다.

Ruby에서 작은따옴표 문자열과 큰따옴표 문자열이 백슬래시를 처리하는 방법 간의 근본적인 차이점을 설명하는 데 도움이 되는 몇 가지 규칙이 있나요?

도움이 되었습니까?

해결책

나는 당신에게 "Ruby 프로그래밍/문자열"를 통해 차이점에 대한 매우 간결하면서도 포괄적인 개요를 확인할 수 있습니다.

참조에서 :

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

"Betty's"에는 작은따옴표와 동일한 문자인 아포스트로피가 포함되어 있기 때문에 두 번째 줄에서는 백슬래시를 사용하여 아포스트로피를 이스케이프 처리해야 합니다. 그러면 Ruby는 아포스트로피가 문자열의 끝을 표시하는 대신 문자열 리터럴에 있다는 것을 이해할 수 있습니다. 문자열 리터럴.백슬래시 뒤에 작은따옴표가 오는 것을 이스케이프 시퀀스라고 합니다.

다른 팁

큰따옴표로 묶인 문자열은 아래와 같이 전체 범위의 이스케이프 시퀀스를 지원합니다.

  • \a 벨/알림(0x07)
  • \b 백스페이스(0x08)
  • \e 탈출(0x1b)
  • \f 폼포드(0x0c)
  • \n 줄바꿈(0x0a)
  • \r 반환(0x0d)
  • \s 공백(0x20)
  • \t 탭(0x09)
  • \v 세로 탭(0x0b)

작은따옴표로 묶인 문자열의 경우 두 개의 연속 백슬래시가 단일 백슬래시로 대체되고 백슬래시 뒤에 작은따옴표가 오면 작은따옴표가 됩니다.

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

Ruby는 큰따옴표로 묶인 문자열의 이스케이프 시퀀스만 해석합니다.작은따옴표로 묶인 문자열에서는 \\ (백슬래시 백슬래시) 및 \' (백슬래시 따옴표)는 특수 문자로 간주됩니다.더 많은 해석이 필요한 경우에만 큰따옴표로 묶은 문자열을 사용해야 합니다.그렇지 않은 경우 작은따옴표를 사용하면 성능이 향상됩니다.

변수 이름을 포함한다고 언급했을 때 Ruby는 절대 그렇게 하지 않습니다.변수 이름만 문자열 리터럴로 처리됩니다.변수(또는 표현식)의 값을 포함하려면 다음과 같이 표현식을 입력하십시오.

"#{variable}"

이는 큰따옴표로 묶인 문자열에서만 작동합니다.작은따옴표에 변수를 추가하려면 다음을 수행해야 합니다.

'The value of X is: '+X

심각한 형식 지정이 필요한 경우 Ruby의 sprintf 및 printf 버전을 살펴보세요.이는 C 함수에 대한 래퍼이며 매우 강력하지만 사용하기가 약간 번거롭습니다.

이는 완전한 답변이 아니며(간단한 질문에 이미 답변되었으므로) 보충 정보입니다.

어떤 스타일의 Ruby 문자열 인용을 선호하시나요?

탈출 해야하는 경우 이중 인용문을 사용하지 마십시오.그리고 "단일 대 이중 인용문"트랩에 빠지지 마십시오.Ruby는 문자열 리터럴에 대한 임의의 구분자를 잘 지원합니다.

http://rors.org/2008/10/26/dont-escape-in-strings

나는 그 조언을 받아들였고 결코 뒤돌아보지 않았습니다!

''가 이중 인용 문자열에서 특수 문자로 해석되기 때문에 단일 인용 문자열에서 문자가 그대로 유지되기 때문입니까?

예.작은따옴표로 묶인 문자열은 리터럴로 처리됩니다.큰따옴표로 묶인 문자열은 보간됩니다.이는 다른 Ruby 계열 언어에서도 동일하며 1.9에서는 변경되지 않았습니다.

당신은 할 수 있습니다 <%= f.label :nom_entreprise, "Nom de l'entreprise" %>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top