Just do IT

思うは招く

[Ruby] ヒアドキュメントの作り方

ヒアドキュメントとは

  • 行指向文字列リテラルを使って文字列を作る方法
  • 複数行の文字列はヒアドキュメントを使ったほうが書きやすい

作り方

<<識別子



識別子
  • 先頭は<<で始める
  • 識別子は最初と最後で同じ文字列を使う
    • TEXTEOFEOBがよく使われる
    • 記述する文字列の中に含まれない文字列を使うこと
  • ヒアドキュメントの中では式展開が使える
    • <<'EOF'のように識別子をシングルクォートで囲むと式展開は使えない

作成例:

# 変数に代入もできる
moji = <<EOF
test
test
test
EOF

# pメソッドだと
p moji
=> "test\ntest\ntest\n"

# putsメソッドだと
puts moji
=> 
test
test
test

メソッドの中に入れる

def moji
  <<-EOF
  test
  test
  test
  EOF
end

puts moji
=> 
test
test
test

ここで注意なのが、<<-EOFと、-を入れている点。 識別子の左にハイフンを入れないと、この場合こんなエラーがでる。

can't find string "EOF" anywhere before EOF
syntax error, unexpected end-of-input, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END

つまり、表示されない。 よって、ハイフンを入れる。

また、-なら文字列のインデントが表示される。

<<-EOF

def moji
  <<-EOF
      test
      test
      test
    EOF
end

puts moji
=>
      test
      test
      test

~だと、インデントは無視される。

<<~EOF

def moji
  <<~EOF
      test
      test
      test
    EOF
end

puts moji
=>
test
test
test