Да, вы можете. (Вы пробовали это?) 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
. Поскольку строковое представление символа является одним и тем же текстом, использование символов при интерполяции, подобной этому, сохраняет один символ при наборе текста. Я использую это чаще всего как:
cats = 13
str = "I have #{cats} cat#{:s if cats!=1}"