I am looking for a more elegant way of concatenating strings in Ruby.
I have the following line:
source = \"#{ROOT_DIR}/\" << project <<
I'd prefer using Pathname:
require 'pathname' # pathname is in stdlib
Pathname(ROOT_DIR) + project + 'App.config'
about <<
and +
from ruby docs:
+
: Returns a new String containing other_str concatenated to str
<<
: Concatenates the given object to str. If the object is a Fixnum between 0 and 255, it is converted to a character before concatenation.
so difference is in what becomes to first operand (<<
makes changes in place, +
returns new string so it is memory heavier) and what will be if first operand is Fixnum (<<
will add as if it was character with code equal to that number, +
will raise error)
For your particular case you could also use Array#join
when constructing file path type of string:
string = [ROOT_DIR, project, 'App.config'].join('/')]
This has a pleasant side effect of automatically converting different types to string:
['foo', :bar, 1].join('/')
=>"foo/bar/1"
If you are just concatenating paths you can use Ruby's own File.join method.
source = File.join(ROOT_DIR, project, 'App.config')
You can also use %
as follows:
source = "#{ROOT_DIR}/%s/App.config" % project
This approach works with '
(single) quotation mark as well.