2011-03-04 3 views
10

이 문자열의 끝에 '/'를 단순히 추가하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?Ruby에서 문자열을 추가하는 방법

>> params[:id] 
"shirts" 

params[:id] == "shirts/"으로 만들고 싶습니다. 해당 문자열 끝에 /을 어떻게 추가합니까? 이처럼

답변

17

간단한 :

params[:id] = params[:id] + '/' 

또는

params[:id] += '/' 

Moar 공상 :

params[:id] << '/' 

또 다른 방법으로이 작업을 수행 :

,
params[:id].concat '/' 

당신이 정말 어떤 희한 이유로 GSUB 주장하는 경우 :

params[:id].gsub! /$/, '/' 
1

:

params[:id] + '/' == 'shirts/' 

필요 없음 GSUB :

당신이없는 경우에 후행 슬래시가있을 수 있습니다. 그런 다음 사용

params[:id] = params[:id] + '/' unless params[:id].match(/.*\/$/) 
params[:id] == 'shirts/' 
1

삽 연산자?

params[:id] << "/" 
0

나는 params[:id] << "/"가 작동해야한다고 생각합니다.

0

URL을이 방법으로 작성하려는 경우 잘못했을 가능성이 있지만 올바른 방법을 말할 수는 없습니다.

이 방법으로 디렉토리 경로를 만들고 다른 경로가있는 경우 File.join과 같은 것을 사용하십시오. Link to the documentation

3

은 "베스트"사용 사례에 크게 의존하지만, 다음 코드를 고려하십시오

a = 'shirts' 
b = a 
params = {} 
params[:id] = b 
params[:id] << '/' 
params[:id] #=> "shirts/" 

우리가 기대하는대로를 << 슬래시하지만 ... 추가되었습니다

a #=> "shirts/" 
# a has changed too! 

그래서 , 이러한 방법으로 당신의 이해 수준에 따라, 이것은 예상하지 못한 행동입니다. 비교 대상 :

params[:id] += '/' 
params[:id] #=> "shirts/" 
a #=> "shirts" 
# a remains the same 

기본적으로 일부 개체는 새 개체를 만들고 다른 개체는 기존 개체를 수정합니다. object_id 메소드로 테스트 할 수 있습니다.

str1 = 'a' 
str2 = str1 
str1.object_id #=> 14310680 
str2.object_id #=> 14310680 
# Both str1 and str2 point to the same object 

지금

str1 << 'b' #=> "ab" 
str1.object_id #=> 14310680 
str2 #=> "ab" 

우리는 성공적으로 새로운 객체를 생성하지 않고 및 STR2 여전히 같은 객체는 또한 "업데이트"를 얻는다을 가리키는 이후 str1과 수정했습니다. 마지막으로, 경우에 우리는 += 방법 사용 : 우리가 STR1 아무것도 첨가하지 않은

str1 #=> "ab" 
str1 += '' #=> "ab" 
str1.object_id #=> 15078280 
str2.object_id #=> 14310680 

공지를하지만 여전히 새로운 객체를 생성합니다.

관련 문제