我想在此字符串的末尾添加「/」。做這個的最好方式是什麼?如何在Ruby中添加字符串
>> params[:id]
"shirts"
我想使params[:id] == "shirts/"
。如何在該字符串的末尾添加/
?
我想在此字符串的末尾添加「/」。做這個的最好方式是什麼?如何在Ruby中添加字符串
>> params[:id]
"shirts"
我想使params[:id] == "shirts/"
。如何在該字符串的末尾添加/
?
最簡單的:
params[:id] = params[:id] + '/'
或
params[:id] += '/'
Moar花哨:
params[:id] << '/'
另一種方式做到這一點:
params[:id].concat '/'
如果你真的對某些原因的bizzare堅持GSUB:
params[:id].gsub! /$/, '/'
像這樣:
params[:id] + '/' == 'shirts/'
沒有GSUB需要:)
除非你有可能是在某些情況下斜線。然後使用:
params[:id] = params[:id] + '/' unless params[:id].match(/.*\/$/)
params[:id] == 'shirts/'
鏟操作?
params[:id] << "/"
我認爲params[:id] << "/"
應該工作。
如果你想以這種方式構建一個URL,你可能做錯了,但我不能告訴你正確的做法。
如果您嘗試以這種方式構建目錄路徑,並且路徑中還有其他位,請使用類似File.join
的內容。 Link to the documentation
「最佳」 對你的使用情況在很大程度上取決於但考慮下面的代碼:
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
通知,但它仍然會創建一個新的對象。