我正在寻找一种在Ruby中连接字符串的更优雅的方式。
我有如下一行:
source = "#{ROOT_DIR}/" << project << "/App.config"
有更好的方法吗?
那么<<和+之间有什么区别呢?
我正在寻找一种在Ruby中连接字符串的更优雅的方式。
我有如下一行:
source = "#{ROOT_DIR}/" << project << "/App.config"
有更好的方法吗?
那么<<和+之间有什么区别呢?
当前回答
对于你的特殊情况,你也可以使用array# join构造文件路径类型的字符串:
string = [ROOT_DIR, project, 'App.config'].join('/')]
这有一个令人愉快的副作用,自动将不同类型转换为字符串:
['foo', :bar, 1].join('/')
=>"foo/bar/1"
其他回答
我更喜欢使用Pathname:
require 'pathname' # pathname is in stdlib
Pathname(ROOT_DIR) + project + 'App.config'
关于ruby文档中的<<和+:
+:返回一个包含连接到str的other_str的新String
<<:将给定对象连接到str。如果对象是0到255之间的Fixnum,则将其转换为连接前的字符。
因此,区别在于第一个操作数变成了什么(<<在适当的位置进行更改,+返回新字符串,因此内存更重),如果第一个操作数是Fixnum(<<将添加,就像它是代码等于该数字的字符,+将引发错误)
你可以直接在字符串定义中连接:
nombre_apellido = "#{customer['first_name']} #{customer['last_name']} #{order_id}"
这里有更多的方法:
"String1" + "String2"
"#{String1} #{String2}"
String1<<String2
等等……
您可以使用+或<<操作符,但在ruby中.concat函数是最可取的,因为它比其他操作符快得多。你可以用它。
source = "#{ROOT_DIR}/".concat(project.concat("/App.config"))
你说的是串联?那么#concat方法呢?
a = 'foo'
a.object_id #=> some number
a.concat 'bar' #=> foobar
a.object_id #=> same as before -- string a remains the same object
公平地说,concat别名为<<。