34

我正在浏览关于 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 的行为相同,并且将字符串放在双引号中。如果我们可以使用 %{} 来获得相同的输出,那么任何人都知道这两个到底有什么用途。

4

2 回答 2

43

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

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

于 2013-11-05T06:06:28.877 回答
19

%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\""
于 2015-03-31T06:08:36.847 回答