1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-02 22:58:01 +00:00

Add Disable Interpolation For A Heredoc String as a Ruby TIL

This commit is contained in:
jbranchaud
2024-12-09 22:11:08 -06:00
parent a8ba753c92
commit 1c9e12b96f
2 changed files with 43 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
_1532 TILs and counting..._
_1533 TILs and counting..._
---
@@ -1223,6 +1223,7 @@ _1532 TILs and counting..._
- [Define Multiline Strings With Heredocs](ruby/define-multiline-strings-with-heredocs.md)
- [Destructure The First Item From An Array](ruby/destructure-the-first-item-from-an-array.md)
- [Destructuring Arrays In Blocks](ruby/destructuring-arrays-in-blocks.md)
- [Disable Interpolation For A Heredoc String](ruby/disable-interpolation-for-a-heredoc-string.md)
- [Disassemble Some Codes](ruby/disassemble-some-codes.md)
- [Double Splat To Merge Hashes](ruby/double-splat-to-merge-hashes.md)
- [Edit Previous Parts Of The Pry Buffer History](ruby/edit-previous-parts-of-the-pry-buffer-history.md)

View File

@@ -0,0 +1,41 @@
# Disable Interpolation For A Heredoc String
As a matter of convenience, a heredoc performs string interpolation by default.
Here is an example of that.
```ruby
irb(main):087> word = 'taco'
=> "taco"
irb(main):088" puts <<-TEXT
irb(main):089" I want to eat a #{word}!
irb(main):090> TEXT
I want to eat a taco!
=> nil
```
A much less common scenario is that we don't want string interpolation to take
place. For whatever reason, we want the exact string to be preserved. To
achieve that, we can wrap the opening heredoc identifier in single quotes.
As you can see, the `#{word}` portion is preserved.
```ruby
irb(main):091> word = 'taco'
=> "taco"
irb(main):092' puts <<-'TEXT'
irb(main):093' I want to eat a #{word}!
irb(main):094> TEXT
I want to eat a #{word}!
=> nil
```
This syntax puts the heredoc in single-quote mode. I left the IRB line preamble
in for each codeblock so that you can see the difference. The first example
(lines 88 and 89) shows the heredoc is double-quoted. The second example (lines
92 and 93) shows the heredoc is single quoted.
Note: the closing heredoc identifier (`TEXT` in this case) is not wrapped in
single quotes, just the opening one.
[source](https://ruby-doc.org/3.3.6/syntax/literals_rdoc.html#label-Here+Document+Literals)