5

你可以在 here-doc 中放置一个条件语句吗?

IE:

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

谢谢

4

1 回答 1

9

是的你可以。(您尝试过吗?)声明为您的HEREDOCs 的行为就像一个双引号字符串。如果您碰巧想要反过来,您可以像这样单引号引用您的 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调用了它。由于符号的字符串表示是相同的文本,因此在插值中使用符号可以在键入时节省一个字符。我最常使用它,例如:

cats = 13
str = "I have #{cats} cat#{:s if cats!=1}"
于 2010-12-03T05:38:39.263 回答