如何在Ruby中添加字符串
问题描述:
我想在此字符串的末尾添加“/”。做这个的最好方式是什么?如何在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
通知,但它仍然会创建一个新的对象。