我想在这个字符串的末尾添加一个'/'。这样做的最佳方式是什么?
>> params[:id]
"shirts"
我想params[:id] == "shirts/"
。如何在该字符串的末尾添加/
?
答案 0 :(得分:17)
最简单的:
params[:id] = params[:id] + '/'
或
params[:id] += '/'
Moar fancy:
params[:id] << '/'
另一种方法:
params[:id].concat '/'
如果你真的因为某些古怪的原因而坚持使用gsub:
params[:id].gsub! /$/, '/'
答案 1 :(得分:4)
&#34;最佳&#34;在很大程度上取决于您的使用案例,但请考虑以下代码:
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仍指向同一个对象,因此它也会获得&#34;更新&#34;。最后,如果我们使用+=
方法:
str1 #=> "ab"
str1 += '' #=> "ab"
str1.object_id #=> 15078280
str2.object_id #=> 14310680
请注意,我们没有向str1添加任何内容,但它仍然会创建一个新对象。
答案 2 :(得分:1)
像这样:
params[:id] + '/' == 'shirts/'
不需要gsub:)
除非你在某些情况下可能会有斜杠。然后使用:
params[:id] = params[:id] + '/' unless params[:id].match(/.*\/$/)
params[:id] == 'shirts/'
答案 3 :(得分:1)
铲子操作员?
params[:id] << "/"
答案 4 :(得分:0)
我认为params[:id] << "/"
应该有用。
答案 5 :(得分:0)
如果您尝试以这种方式构建网址,那么您可能做错了,但我无法告诉您正确的方法。
如果您尝试以这种方式构建目录路径,并且该路径还有其他位,请使用File.join
之类的内容。 Link to the documentation