2011-03-04 101 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 

通知,但它仍然会创建一个新的对象。

相关问题