Как избежать # {из строковой интерполяции

У меня есть heredoc, где я использую #{} для интерполяции некоторых других строк, но есть экземпляр, где я также хочу написать фактический текст #{some_ruby_stuff} в моем heredoc, БЕЗ его интерполирования. Есть ли способ избежать #..

Я пробовал "\", но не повезло. Хотя он выходит из #{}, он также включает в себя "\":

>> <<-END
 #{RAILS_ENV} \#{RAILS_ENV} 
END
=> " development \#{RAILS_ENV}\n"

Ответ 1

Я думаю, что обратная косая черта - это просто Ruby, который может быть полезен некоторым способом irb.

>> a,b = 1,2        #=> [1, 2]
>> s = "#{a} \#{b}" #=> "1 \#{b}"
>> puts s           #=> 1 #{b}
>> s.size           #=> 6

Итак, я думаю, что у вас уже есть правильный ответ.

Ответ 2

Для heredoc без необходимости использовать все ваши потенциальные интерполяции, вы можете использовать single-quote-style-heredoc. Он работает следующим образом:

item = <<-'END'
  #{code} stuff
  whatever i want to say #{here}
END

Ответ 3

Вместо этого вы можете использовать кавычки '. Все, что заключено в них, не интерполируется.

Ваше решение с экранированием # также работает для меня. Действительно, интерпретатор Ruby показывает

=> "\#{anything}"

но

> puts "\#{anything}"
#{anything}
=> nil

Ваша строка содержит именно то, что вы хотели, только метод p показывает ее с помощью escape-символов. Фактически, метод p показывает вам, как должна записываться строка, чтобы получить точно объект, представленный его параметром.