我们有时会看到像%w(some strings) 或%s(some other strings) 或%Q(even more #{strings}) 这样的Ruby片段。它可能有点不清楚正在发生什么。% 的语法是什么?不同的字母有什么作用?它们什么时候是大写或小写?
这通常被称为*"一般限定的输入",尽管我也听说这被称为"百分比语法"。*不管怎么说,它都是创建字符串、数组、符号或正则表达式的速记方法。而且,正如我们将在下面看到的,每个不同的字母都会创建一个不同类别的对象。
除了一个例外,小写定界符忽略了插值,而大写定界符计算插值。
一般的分隔符输入最常被用于常数,这些常数是Strings的数组,在喜欢多行字符串语法的代码库中,以及用于重构函数。
让我们来简单了解一下一般分隔符的输入语法,以及它们的作用。
%w() 或 %W() - 字符串的数组
这些语法在空格上分割参数,并创建数组,数组中的每个元素都是一个字符串。
-
%w()没有插值,所以也会在空格处分割 "看起来像插值 "的值:
%w(some values #{1 + 1}) => ["some", "values", "\#{1", "+", "1}"] -
%W()有插值:
%W(some values #{1 + 1}) => ["some", "values", "2"]
%i() 或 %I() - 符号数组
与上述相同,只是每个元素不是字符串,而是一个符号。
-
%i() 没有插值,所以也会在空格处分割插值:
%i(some values #{1 + 1}) => [:some, :values, :"\#{1", :+, :"1}"] -
%I() 有插值:
%I(some values #{1 + 1}) => [:some, :values, :"2"]
%q() 或 %Q() - 字符串
这些将把参数变成一个字符串。
-
%q() 没有插值,所以也会在空间上分割插值:
%q(some values #{1 + 1}) => "some values \#{1 + 1}" -
%Q() 有插值:
%Q(some values #{1 + 1}) => "some values 2"
%s() - 符号
%s() 没有插值,所以也会在空格处分割插值:
%s(some values #{1 + 1})
=> :"some values \#{1 + 1}"
%r() - Regex
%r() 是大写/插值规则的唯一例外。%r()将给我们一个带插值的重词:
%r(some values #{1 + 1})
=> /some values 2/
希望下次你看到,或需要使用一般的分隔符输入时,你现在知道应该使用什么合适的分隔符。
注意:给内容定界的字符(( 和) 在上面的例子中)不一定是小括号,也可以是方括号、大括号、角括号和其他字符--但这是另一个提示。