ruby字符串分隔符中'%{}','%Q {}','%q {}'之间的差异

时间:2013-11-05 05:59:13

标签: ruby string

我正在阅读关于ruby的在线教程,并发现了这个“General Delimited Strings”,

%{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的确切用途。

2 个答案:

答案 0 :(得分:31)

以下是关于他们的一些提示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

  

除了创建字符串的%(...)之外,%可以创建其他类型的对象。与字符串一样,大写字母允许插值和转义字符,而小写字母则禁用它们。

答案 1 :(得分:9)

%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\""