Чтобы уточнить точку зрения мю.
Синтаксис <<-SOMESTIRING
определяет начало строки. Строка заканчивается SOMESTRING
(в начале строки)
Например, вы видите это много
string = <<-EOF
Hey this is a really long string
with lots of new lines
EOF
string # => " Hey this is a really long string\n\n with lots of new lines\n"
В этом случае RUBY
означает, что это код рубина (который будет оцениваться). Вы должны помнить, что когда внутри строки, escape-синтаксис #{ruby_code}
будет оценивать заданный ruby_code и вставлять результат в строку.
Так что, чтобы обойти это, вы можете сделать что-то вроде,
irb >> s = <<-RUBY
"#{'#{Rails.root}'}/app/assets/stylesheets"
RUBY
#=> ""\#{Rails.root}/app/assets/stylesheets"\n"
Здесь мы вырываем строку, используя #{}
, а затем используем одинарные кавычки, чтобы сказать ruby, что мы не хотим, чтобы #{Rails.root}
оценивался.
РЕДАКТИРОВАТЬ: Я думал об этом больше, и понял, что это эквивалентно и немного чище
irb >> s= <<-RUBY
Rails.root.to_s + "/app/assets/stylesheets"
RUBY #=> "Rails.root.to_s + "/app/assets/stylesheets"\n"
Таким образом, нам вообще не нужно беспокоиться о побеге:)