Как избежать # {из строковой интерполяции
У меня есть 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
показывает вам, как должна записываться строка, чтобы получить точно объект, представленный его параметром.