我正在寻找一种在Ruby中连接字符串的更优雅的方式。
我有如下一行:
source = "#{ROOT_DIR}/" << project << "/App.config"
有更好的方法吗?
那么<<和+之间有什么区别呢?
我正在寻找一种在Ruby中连接字符串的更优雅的方式。
我有如下一行:
source = "#{ROOT_DIR}/" << project << "/App.config"
有更好的方法吗?
那么<<和+之间有什么区别呢?
当前回答
你也可以这样使用%:
source = "#{ROOT_DIR}/%s/App.config" % project
这种方法也适用于'(单)引号。
其他回答
这里有更多的方法:
"String1" + "String2"
"#{String1} #{String2}"
String1<<String2
等等……
+操作符是正常的连接选择,并且可能是连接字符串的最快方式。
+和<<之间的区别在于<<改变了对象的左侧,而+则不会。
irb(main):001:0> s = 'a'
=> "a"
irb(main):002:0> s + 'b'
=> "ab"
irb(main):003:0> s
=> "a"
irb(main):004:0> s << 'b'
=> "ab"
irb(main):005:0> s
=> "ab"
如果只是连接路径,可以使用Ruby自己的File。连接方法。
source = File.join(ROOT_DIR, project, 'App.config')
我更喜欢使用Pathname:
require 'pathname' # pathname is in stdlib
Pathname(ROOT_DIR) + project + 'App.config'
关于ruby文档中的<<和+:
+:返回一个包含连接到str的other_str的新String
<<:将给定对象连接到str。如果对象是0到255之间的Fixnum,则将其转换为连接前的字符。
因此,区别在于第一个操作数变成了什么(<<在适当的位置进行更改,+返回新字符串,因此内存更重),如果第一个操作数是Fixnum(<<将添加,就像它是代码等于该数字的字符,+将引发错误)
木偶:
$username = 'lala'
notify { "Hello ${username.capitalize}":
withpath => false,
}