Можете ли вы поставить условное заявление в документ здесь? - PullRequest
3 голосов
/ 03 декабря 2010

Можете ли вы поместить условный оператор в Here-Doc?

IE:

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

Спасибо

1 Ответ

6 голосов
/ 03 декабря 2010

Да, вы можете. (Вы пробовали это?) 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}"
...