Ruby Unicode и проблема интерполяции строк - PullRequest
2 голосов
/ 22 марта 2011

Я пытаюсь создать длинный латексный документ с помощью Ruby. Если я использую обычное объявление типа heredoc, Ruby обнаруживает обратную косую черту (которых в Latex много), когда Юникод экранируется:

doc = <<DOC
\underline{FOO}
DOC #=> invalid Unicode escape \underline{FOO}

Если я поставлю одинарные кавычки вокруг DOC, все это будет восприниматься как строковый литерал:

doc = <<'DOC'
\underline{FOO}
DOC
puts doc #=> \underline{FOO}

Хорошо, но теперь я не могу использовать интерполяцию строк:

foo = "foo"
doc = <<'DOC'
string interpolation says "#{foo}".
DOC
puts doc #=> string interpolations says "#{foo}".

Я хотел бы получить лучшее из обоих миров, то есть интерполяцию строк, и не нужно избегать каждого обратного слеша. Это возможно?

1 Ответ

2 голосов
/ 22 марта 2011

Я хотел бы получить лучшее из обоих миров, то есть интерполяцию строк, и не нужно избегать каждого обратного слеша.Возможно ли это?

На самом деле не используется прямой Ruby.Проблема в том, что вы безошибочно выполняете предполагаемое поведение Ruby при обработке строк и обратной косой черты.

Обычно они используются с Rails для вывода HTML, но альтернативный способ получить то, что вы собираетесь, может заключаться в использовании ERB или Erubis и связанные с ними шаблоны.Они обрабатываются вне обычной обработки строк в Ruby, но позволяют вам встраивать переменные.Они не используют знакомую интерполяцию #{foo}, но поддерживают

string interpolation says "<%= foo %>".

Erubis - это скомпилированная версия ERB, поэтому она работает намного быстрее.ERB поставляется с Ruby, так что выбирайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...