侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

Ruby 中的 % 用法

barwe
2021-09-01 / 0 评论 / 0 点赞 / 629 阅读 / 1,221 字
温馨提示:
本文最后更新于 2022-07-18,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

%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]

这意味着在脚本中,数组元素可以按行书写,且可以缩进,这是一种很正常的行为。

0

评论区