Ruby Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)

algo31031 · 2014年04月10日 · 最后由 excosy 回复于 2016年02月18日 · 30315 次阅读
本帖已被管理员设置为精华贴

原文地址

%Q

用于替代双引号的字符串。当你需要在字符串里放入很多引号时候,可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\")

>> %Q(Joe said: "Frank said: "#{what_frank_said}"")
=> "Joe said: "Frank said: "Hello!"""

(...)也可用其他非数字字母的符号或成对的符号代替,诸如[...], !...!, +...+,{...}, <...>等。
以下写法全部与上面等效:

>> %Q!Joe said: "Frank said: "#{what_frank_said}""!
>> %Q[Joe said: "Frank said: "#{what_frank_said}""]
>> %Q+Joe said: "Frank said: "#{what_frank_said}""+

除此之外还可省略Q写作:

>> %/Joe said: "Frank said: "#{what_frank_said}""/
=> "Joe said: "Frank said: "Hello!""" 

%q

%Q类似,但是表示的是单引号字符串

>> %q(Joe said: 'Frank said: '#{what_frank_said} ' ')
=> "Joe said: 'Frank said: '\#{what_frank_said} ' '"    

%W

语法近似于%Q, 用于表示其中元素被双引号括起的数组。

>> %W(#{foo} Bar Bar\ with\ space)
=> ["Foo", "Bar", "Bar with space"] 

%w

用于表示其中元素被单引号括起的数组。比较奇怪的是\(斜杠空格) 会被转化成(空格), 但是其他的内容不会。

>> %w(a b c\ d \#e #{1}f)
=> ["a", "b", "c d", "\\#e", "\#{1}f"]

%x

使用`方法执行一段 shell 脚本并返回标准输出内容。

>> %x(echo foo:#{foo})
=> "foo:Foo\n"    

%r

语法近似于%Q, 用于正则表达式。

>> %r(/home/#{foo})
 => "/\\/home\\/Foo/"     

%s

用于表示 symbol, 但是不会对其中表达式等内容进行转化

>> %s(foo)
=> :foo
>> %s(foo bar)
=> :"foo bar"
>> %s(#{foo} bar)
=> :"\#{foo} bar"

%i

Ruby 2.0 之后引入的语法,用于生成一个 symbol 数组

2.0.0p247 :014 > %i(a b c)
=> [:a, :b, :c] 

长见识了

还有%操作符 %的用法(即 sprintf)

irb(main):125:0> '%02d' % 9
=> "09"

ruby 里面特殊符号挺多。。。。。。

<< ->

各种。。。

纠一下错…symble -> symbol

#4 楼 @5swords 除了 JS 那傻逼之外,哪个语言没有 printf 呢...

根本记不住~不过挺炫~ %W%w为什么结果都是双引号啊?

这个要顶啊

比较奇怪的是 (斜杠空格) 会被转化成 (空格), 但是其他的内容不会

这个不是反斜杠本身被转化吧,只是用来转义,说明后边的空白不是分隔符,就好像 shell 里边如果有带空格的文件名,也是要用\,不然空白就会被当成分隔符,文件名就会被当成是多个参数:

$ cd dir with space/
bash: cd: dir: No such file or directory

$ cd dir\ with\ space/
# enter the diretory ** dir with space **

这个不错,顶

%%%%%%% => ""

:plus1: awesome

![](http://l.ruby-china.com/photo/2014/244be773944c44ee5d8d18c5866ad294.png)

不错

涨姿势了,一会多学学~!

这种帖,看一遍之后直接收藏...

#9 楼 @alsotang JS 也有类似的,console.log就能实现printf的效果 参见这篇文章

#22 楼 @spacewander node 里面,%d几乎就是残废的。%.2d 什么的一概不支持。%d 大多数时候用起来跟 %s 一样。

偶表示特殊符号太多,需要多看看,然后在实际项目中使用,这样才会记得。

不错,用了会让代码更加精简

26 楼 已删除

%s ,%x 的作用的确是长见识了

马克一个。

涨姿势了·················

#9 楼 @alsotang js 有 console.log(),而且 console.log 还有带 css 样式的%c玩法,其它哪个语言有?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号