ヒアドキュメント内に条件文を入れることはできますか?
いいえ:
sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
ありがとう
はい、できます。(試してみましたか?) HEREDOC は、二重引用符で囲まれた文字列のように振る舞います。たまたま逆にしたい場合は、次のようにHEREDOCインジケーターを一重引用符で囲みます。
str = <<EOF
#{ "this is interpolated Ruby code" }
EOF
str = <<'EOF'
#{ This is literal text }
EOF
これらの名前のメソッドまたはローカル変数がない限り、例の「緑」と「青」は間違っています。おそらく次のいずれかが必要でした:
str = <<EOF
The sky is #{if sky==1 then 'blue' else 'green' end}
EOF
...または簡潔なバージョン:
str = <<EOF
The sky is #{sky==1 ? :blue : :green}
end
すべての文字列補間と同様に、各式の結果がそれを#to_s
呼び出しています。記号の文字列表現は同じテキストであるため、そのような補間で記号を使用すると、入力時に 1 文字節約できます。私はそれを次のように最も頻繁に使用します:
cats = 13
str = "I have #{cats} cat#{:s if cats!=1}"