Подтвердить что ты не робот

Каков прецедент для методов цитирования Ruby% q/% Q?

Я читал программу Thomas 'Programming Ruby 1.9 и использовал альтернативные методы с одиночным и двойным кавычками (%q / %Q). Я знаю их и из других ссылок на языке Ruby.

%q/I'm acting like a single-quoted string/

%Q|"I'm acting like a double-quoted string" --Anonymous|

Я долго не работал с Ruby, но я никогда не сталкивался с этим методом цитирования в производственном коде.

Помимо очевидной способности избегать скрытых кавычек с обратными косыми чертами, каковы распространенные случаи использования этого метода цитирования по регулярным одиночным или двойным кавычкам? Обычно ли они используются в одиночных или многострочных строках? Если они используются в многострочных строках, всегда ли они предпочитают строки HEREDOC? Есть ли какая-то идиллическая Ruby, где они обычно встречаются?

4b9b3361

Ответ 1

Они чрезвычайно полезны для экранирования HTML с использованием JavaScript в нем, где вы уже "исчерпали" методы цитирования:

link = %q[<a href="javascript:method('call')">link</a>]

Я также нашел, что они очень полезны при работе с многострочными операторами SQL:

execute(%Q[
  INSERT INTO table_a (column_a)
    SELECT value
      FROM table_b
      WHERE key='value'
])

Преимущество в том, что вам не нужно обращать внимание на тип цитирования, используемый в вашем запросе. Он будет работать как с одним, так и с двумя, или с обоими. Они также намного менее суетятся, чем метод стиля HEREDOC.

Ruby предоставляет другие удобные методы, такие как %r, которые могут создавать регулярные выражения. Это позволяет избежать косой черты при попытке написать тот, который обрабатывает такие вещи, как http://, которые в противном случае пришлось бы экранировать.

Ответ 2

Обзор

Помимо "избежать внутренних экранов кавычек" и примеров, ранее предоставленных @tadman, существуют и другие варианты использования:

  • автогенерирующий код на том же языке, что и сам генератор (например, Ruby, генерирующий Ruby).
  • обеспечение чисто форматированного кода, который не путает функцию подсветки синтаксиса вашего текстового редактора.
  • позволяют хранить кодовые блоки, которые могут проходить через несколько уровней хранения (например, база данных, взаимодействующая с веб-сайтом, или система управления фрагментами, взаимодействующая с текстовым редактором, которая взаимодействует с подоболочкой и т.д.)

Подробнее

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

Помимо примеров, уже предоставленных @tadman, существует общий случай генерации кода, в котором генерируемый код является таким же или по существу аналогичным синтаксисом, как и код генерирующей программы.

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

Чтобы увидеть примеры этого, не стесняйтесь взглянуть на следующие ссылки.

Ссылки

[См., например,

]

Ответ 3

Возможно, стоит отметить, что% q используется компоновщиком и ювелиром по умолчанию при генерации gemspecs для раздела summary/description gemspec. Это не позволяет кому-либо использовать кавычки в сводке или описании и сломать gemspec.

Ответ 4

Я знаю, что это старый поток, но я использовал их в процессе производства при вызове команды system и хотел бы интерполировать некоторые значения, например:

 system(%Q(ffmpeg -y -i "#{input_filepath}" -qscale:a 2 "#{output_filepath}"))

Супер удобный.

Ответ 5

Они полезны, когда ваша строка содержит одиночные или двойные кавычки. Это происходит не так часто, но техника очень полезна, когда это происходит.