Разница между '% {}', '% Q {}', '% q {}' в разделителях строк ruby

Я проходил онлайн-учебник по рубину и нашел это "Общие разделимые строки",

%{a word}  # => "a word"
%Q{a word} # => "a word"
%q{a word} # equivalent to single quoted version.

поэтому я попробовал его на irb, и это то, что я вижу

2.0.0p247 :025 > %Q(hi)
 => "hi" 
2.0.0p247 :026 > %q(the)
 => "the" 
2.0.0p247 :027 > %q(th"e)
 => "th\"e" 
2.0.0p247 :028 > %q(th'e)
 => "th'e" 
2.0.0p247 :029 > %Q(h'i)
 => "h'i" 
2.0.0p247 :030 > %Q(h"i)
 => "h\"i"

Оба% q и% Q ведут себя одинаково и принимают строку в двойных кавычках. Кто-нибудь знает, что именно использовать эти 2, если мы можем использовать% {}, чтобы получить тот же результат.

Ответы

Ответ 1

Вот несколько советов о них Ruby_Programming - The % Notation:

% Q [] - Интерполированная строка (по умолчанию)

% q [] - Неинтерполированная строка (кроме \, [и])

Пример:

x = "hi"
p %Q[#{x} Ram!] #= > "hi Ram!"
p %q[#{x} Ram!] #= > "\#{x} Ram!"
p %Q[th\e] #= > "th\e"
p %q[th\e] #= > "th\\e" # notice the \\ with %q[]

Еще один хороший ресурс Percent Strings

Помимо %(...), который создает String, % может создавать другие типы объектов. Как и в случае с строками, буква в верхнем регистре позволяет интерполировать и экранировать символы, в то время как строчная буква отключает их.

Ответ 2

%q(no interpolation)

%Q(interpolation and backslashes)

%(interpolation and backslashes)

Пример

$ str = 'sushant'

$ %q[#{str} "mane"]
 => "\#{str} \"mane\""

$ %Q[#{str} "mane"]
 => "sushant \"mane\""

$ %[#{str} "mane"]
 => "sushant \"mane\""