저는 항상 Ruby에서 문자열 동등성을 테스트하기 위해 이렇게합니다.
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
이것이 객체 동등성을 테스트하지 않고이를 수행하는 올바른 방법입니까?
콘텐츠를 기반으로 문자열을 테스트하는 가장 간결한 방법을 찾고 있습니다.
괄호와 물음표가 있으면 조금 어색해 보입니다.
답변:
http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison 에 따르면
둘 중 하나를
mystring == yourstring
또는
mystring.eql? yourstring
동등합니다.
코드 샘플은 주제의 일부, 즉 기호로 확장되지 않았으므로 질문의 해당 부분에 대한 답변이 없습니다.
두 개의 문자열, foo 및 bar가 있고 둘 다 문자열 또는 기호 일 수있는 경우 다음을 사용하여 동등성을 테스트 할 수 있습니다.
foo.to_s == bar.to_s
알려진 유형의 피연산자에 대한 문자열 변환을 건너 뛰는 것이 좀 더 효율적입니다. 따라서 foo가 항상 문자열이면
foo == bar.to_s
그러나 효율성 향상은 호출자를 대신하여 추가 작업을 요구할 가치가 거의 없습니다.
Ruby 2.2 이전에는 기호가 가비지 수집되지 않고 리소스 고갈을 통해 서비스 거부에 노출 될 수 있으므로 비교 (문자열 또는 기호 사용)를 위해 제어되지 않은 입력 문자열을 삽입하지 마십시오. 기호의 사용을 제어하는 값 (예 : 코드의 리터럴 및 신뢰할 수있는 구성 속성)으로 제한합니다.
Ruby 2.2 는 심볼의 가비지 컬렉션을 도입했습니다 .
foo.intern == bar.intern
더 낫습니다. 문자열을 인터 닝하는 것이 기호에서 문자열을 만드는 것보다 평균적으로 더 효율적입니다. (주어진 문자열이 이전에 인턴 된 경우 기호를 반환합니다.)