A list of Ruby String Literal Creations
Tags: ruby, rails, learning, beginners
Published: 2023-12-30 01:08:43

There are three main categories of string literals in Ruby: quotation, percentage and heredoc. And every category has its own sub-variants.

# Quotation

This category uses single or double quotes to enclose a string. 

* Single-quoted strings do **NOT** allow escape sequences or interpolation.
* double-quoted strings do allow escape sequences and interpolation.
```ruby
# Single-quoted string
str = 'This is a single-quoted string'
# => "This is a single-quoted string"

# Double-quoted string
str = "This is a double-quoted string with interpolation: #{2 + 2}"
# => "This is a double-quoted string with interpolation: 4"
```

# Percentage: 

This category uses the `%` notation to create different types of string literals.

* Available modifiers are 
  * Non-interpolable 
  * interpolable 
  * array of strings 
  * array of symbols
  * regular expression 
  * symbol 
  * backtick 
* You can use any non-alphanumeric character as a delimiter, such as parentheses, brackets, braces, etc. 

```ruby
# Non-interpolable string
str = %q(This is a single-quoted string)
# => "This is a single-quoted string"

# Interpolable string
str = %Q(This is a double-quoted string with interpolation: #{2 + 2})
# => "This is a double-quoted string with interpolation: 4"

# Array of strings
arr = %w(one two three)
# => ["one", "two", "three"]

# Array of symbols
arr = %i(one two three)
# => [:one, :two, :three]

# Regular expression
reg = %r(\d+)
# => /\d+/

# Symbol
sym = %s(hello)
# => :hello

# Backtick
cmd = %x(date)
# => "Wed Dec 27 04:07:07 UTC 2023\n"
```

# Heredoc 
This category allows you to create multi-line strings.

* You can a delimiter of your choice, such as `EOS`, `END`, etc. 
* You can use single quotation in the delimiter `'EOF'` to disable interpolation in heredoc. 
* You can use `<<~` to remove leading whitespace from each line, or `<<-` to allow an indented closing delimiter. 
* You can call a method on a heredoc by placing it after the opening identifier. 
* Opening multiple heredocs on the same line is possible by using different identifiers and delimiters.

```ruby
# Heredoc syntax
str = <<EOS
This is a multi-line string
with heredoc syntax.
EOS
# => "This is a multi-line string\nwith heredoc syntax.\n"

# Heredoc without interpolation
name = "John"
str = <<-'HEREDOC'
My name is #{name}.
HEREDOC
# => "My name is #{name}.\n"

# Heredoc syntax with leading whitespace removed
str = <<~END
  This is another multi-line string
  with leading whitespace removed.
END
# => "This is another multi-line string\nwith leading whitespace removed.\n"

# Heredoc syntax with an indented closing delimiter
str = <<-TEXT
  This is a multi-line string
  with an indented closing delimiter.
  TEXT
# => "This is a multi-line string\nwith an indented closing delimiter.\n"

# Heredoc syntax with a method call
str = <<-TEXT.chomp
  This is a multi-line string
  with a method call.
  TEXT
# => "This is a multi-line string\nwith a method call."

# Multiple heredoc syntax
puts (<<-ONE, <<-TWO)
content for heredoc one
ONE
content for heredoc two
TWO
# => "content for heredoc one\ncontent for heredoc two"
```