2011-03-04 70 views
10

我想在此字符串的末尾添加「/」。做這個的最好方式是什麼?如何在Ruby中添加字符串

>> params[:id] 
"shirts" 

我想使params[:id] == "shirts/"。如何在該字符串的末尾添加/

回答

17

最簡單的:

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

params[:id] += '/' 

Moar花哨:

params[:id] << '/' 

另一種方式做到這一點:

params[:id].concat '/' 

如果你真的對某些原因的bizzare堅持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" 

我們已經成功地修改STR1,而無需創建一個新的對象,因爲STR2仍然指向同一個對象時,它也得到了「升級」。最後,如果我們使用+=方法:我們已經沒什麼可STR1添加

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

通知,但它仍然會創建一個新的對象。