你能在here-doc中加入一个条件语句吗?

时间:2010-12-03 05:34:52

标签: ruby heredoc

你能把条件语句放在here-doc吗?

IE:

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

由于

1 个答案:

答案 0 :(得分:6)

是的,你可以。 (你试过吗?)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

...或terser版本:

str = <<EOF
  The sky is #{sky==1 ? :blue : :green}
end

与所有字符串插值一样,每个表达式的结果都会调用#to_s。由于符号的字符串表示是相同的文本,因此在插值中使用符号可以在键入时保存一个字符。我最经常使用它:

cats = 13
str = "I have #{cats} cat#{:s if cats!=1}"