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

algo31031 · 发布于 2014年04月10日 · 最后由 excosy 回复于 2016年02月18日 · 15484 次阅读
6341
本帖已被设为精华帖!

原文地址

%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] 
共收到 29 条回复
250

:plus1:

9263

长见识了

7643

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

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

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

<< ->

各种。。。

96

纠一下错…symble -> symbol

96

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

3672

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

11430

这个要顶啊

1401

:thumbsup:

4755

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

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

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

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

这个不错,顶

115

%%%%%%% => ""

96

:plus1: awesome

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

不错

9484

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

96

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

96

好帖!

11147

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

96

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

8582

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

12767

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

26楼 已删除
458

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

96

马克一个。

9765

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

96

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

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