Разница между '% {}', '% 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\""