您可以在条件文档中放入条件语句吗?

Mat*_*att 3 ruby heredoc

您可以在条件文档中放入条件语句吗?

IE浏览器:

sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
Run Code Online (Sandbox Code Playgroud)

谢谢

Phr*_*ogz 7

是的你可以。(您尝试过吗?)像您一样声明的HEREDOC就像双引号一样。如果您碰巧希望得到相反的结果,则可以将HEREDOC指标单引号,如下所示:

str = <<EOF
  #{ "this is interpolated Ruby code" }
EOF

str = <<'EOF'
  #{ This is literal text }
EOF
Run Code Online (Sandbox Code Playgroud)

除非您有使用这些名称的方法或局部变量,否则示例中的“绿色”和“蓝色”是错误的。您可能想要:

str = <<EOF
  The sky is #{if sky==1 then 'blue' else 'green' end}
EOF
Run Code Online (Sandbox Code Playgroud)

...或更短版本:

str = <<EOF
  The sky is #{sky==1 ? :blue : :green}
end
Run Code Online (Sandbox Code Playgroud)

与所有字符串插值一样,每个表达式的结果都已#to_s调用它。由于符号的字符串表示形式是相同的文本,因此在插值中使用符号就像在键入时节省一个字符。我最常使用它,例如:

cats = 13
str = "I have #{cats} cat#{:s if cats!=1}"
Run Code Online (Sandbox Code Playgroud)