你能把条件语句放在here-doc吗?
IE:
sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
由于
答案 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}"