如何在Ruby中附加一个字符串

时间:2011-03-04 16:32:26

标签: ruby-on-rails ruby

我想在这个字符串的末尾添加一个'/'。这样做的最佳方式是什么?

>> params[:id]
"shirts"

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

6 个答案:

答案 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