Multiline Strings in Ruby
Multiline strings in Ruby are easy to use with the HEREDOC syntax or the percent string syntax. Create multiple line strings with heredoc.
The Ruby programming language lets you create variables that store strings that are plain, interpolated or multiline.
Multiline strings can be created in many ways. One of those ways is to use a double-quoted string:
puts "Hello,
World"
# Output:
# Hello,
#
# World
Another way to create a multiline string is as HEREDOCs, which were inspired by the Perl programming language.
Here is how you can create a multiline string variable in Ruby with a HEREDOC:
sentence = 'hello world'.
interpolated = "#{sentence} #{sentence} another sentence added."
multiline = <<-TEXT
This is a string
with multiple lines
The string used to start it,
Is also the string that ends it.
TEXT
more_multiline = <<-EOF
Hello
World
EOF
Multiline strings are very useful if you need to create complex SQL queries, such as for product analytics data where you may have a query or sub-queries:
query = <<-SQL
SELECT user_id, SUM(engagement_score) as total_score
FROM user_engagements
WHERE engagement_date >= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)
GROUP BY user_id
HAVING total_score > 100
SQL
results = ActiveRecord::Base.connection.execute(query)
Multiline Syntax in Ruby
You can use the the syntax <<-TEXT
to start a multiline string in Ruby. The "TEXT" part can be any other string. The multiline string will be defined as soon as that "TEXT" is encountered on another line.
multiline = <<-HELLO
hello
world
HELLO
# Output:
# hello
# world
Important: This will not strip out any whitespace at the beginning of each line.
Multiline Syntax in Ruby 2.3+
In Ruby 2.3+, you can use a ~
tilde instead of a -
dash in the multiline syntax to strip out the whitespace at the beginning of each line:
multiline = <<~HELLO
hello
world
HELLO
# Output:
# hello
# world
Multiline percent string in Ruby
You can also use a percent string to create a multiline string using the %q()
syntax:
multiline = %q(
hello
world
)
# Output:
# hello
# world
Important: This will not strip out any whitespace at the beginning of each line. It will preserve any tabs or spaces at the beginning of the line.