🕌

Ruby のヒアドキュメントの識別子に空文字列を渡すとどうなる?

2024/01/05に公開

Ruby ではヒアドキュメントを用いる事で複数行の文字列を定義することができる。

doc = <<~EOS
ここは
複数行の
文字列として
定義される
EOS

pp doc
# => "ここは\n" + "複数行の\n" + "文字列として\n" + "定義される\n"

このときに識別子〜識別子(上記の場合だと EOS )の間が文字列として定義されます。

識別子を空文字列にするとどうなる?

実は以下のように書くことで識別子を『空の文字列』に指定することができます。

doc = <<~""
識別子が
空文字列の場合は
空白行までがヒアドキュメントになる

# ↑この上の行までがヒアドキュメントになる
pp doc
# => "識別子が\n" + "空文字列の場合は\n" + "空白行までがヒアドキュメントになる\n"

これを利用すると以下のような書き方もできます

options = {
  name: "いい感じのオプション",
  description: <<~"",
    ここではいい感じのオプションが指定できます
    これは次の空行までが複数行の文字列になります

  details: <<~"",
    ネストしている場合でも問題ないです
      ここはインデント2
        ここはインデント4
    ここはインデント0

}

この場合は空行に意味を持つのでうっかり空行を消さないようにする必要がありますね。

GitHubで編集を提案

Discussion