%Q
当字符中含有大量引号时可以用来替换用于类型声明的外围双引号:
"I said, \"Hi, Li!\""
# <=>
%Q[I said, "Hi, Li!"]
可以省略Q:
%[I said, "Hi, Li!"]
界定符可以是其他 非数字和字母 的成对符号,例如 {}
, []
, <>
, ++
, !!
, //
等。
%q
声明单引号字符串。
%W
快速声明双引号字符串数组。
foo = "Foo"
%W(#{foo} Bar Bar\ with\ space)
等价于
["Foo", "Bar", "Bar with space"]
知识点:
- 不同元素之间使用 空格 分隔,因此元素内的空格需要用
/
转义 - 即使看不见双引号,也可以使用
#{}
进行插值
%w
快速声明单引号字符串数组。
单引号字符串中的 \
只能用来转义字符串内部的单引号或者 \
。
%w
中元素之间的空格仍然使用 \
来转义:\
,这一点与单引号字符串并不冲突。
%x
使用 ` 方法执行一段 shell 脚本并返回标准输出的内容:
%x[pwd]
#=> "/home/barwe/projects/pathogen/backend\n"
字符串末尾总是会带上一个换行符。
%r
用于正则表达式。
%s
快速声明一个 Symbol 对象,界定符内的内容会被当成一个字符串,且不会对该字符串做任何转化,类似于单引号字符串:
%s[#{foo} bar]
#=> :"\#{foo} bar"
%i
快速声明一个 symbol 数组,元素之间使用空格分隔:
irb(main):020:0> %i[a b c]
=> [:a, :b, :c]
irb(main):021:0> %i[a\ b c]
=> [:"a b", :c]
irb(main):022:0> %i[a\ b #{foo}]
=> [:"a b", :"\#{foo}"]
单个元素的识别规则与 %s
相同。
分隔符
除了空格外,换行符(不是转义字符 \n
)也可以作为分隔符:
irb(main):026:0] %i[
irb(main):027:0] a
irb(main):028:0] b
irb(main):029:0] c
irb(main):030:0] ]
=> [:a, :b, :c]
空格符可以有多个:
irb(main):009:0> %i[a b x]
=> [:a, :b, :x]
所以换行符可以和多个空格搭配使用:
irb(main):010:0] %i[
irb(main):011:0] a
irb(main):012:0] b
irb(main):013:0] c
irb(main):014:0] ]
=> [:a, :b, :c]
这意味着在脚本中,数组元素可以按行书写,且可以缩进,这是一种很正常的行为。
评论区