5

ヒアドキュメント内に条件文を入れることはできますか?

いいえ:

sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF

ありがとう

4

1 に答える 1

9

はい、できます。(試してみましたか?) 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}"
于 2010-12-03T05:38:39.263 に答える