Ruby ---特殊的分隔输入

来源:互联网 发布:小米网络电视台 编辑:程序博客网 时间:2024/05/29 09:14

1. %Q 和 %q [输入字符串]

一般情况下,字符串常量是包含在 " " 和 ' ' 两个符号中间的,也就是双引号和单引号:

  1. irb(main):003:0> str = "GemBlog beta 0.4"
  2. => "GemBlog beta 0.4"
  3. irb(main):004:0> str1 = 'Hi there!'
  4. => "Hi there!"

双引号、单引号,与其对应的就是%Q和%q,虽然使用引号来包含字符串已经足够,但是在某些情况下,还是应%Q和%q方便,比如字符串中含有单双引号,还有字符串跨越多行的时候:

  1. irb(main):012:0> str = %q[ Tom says: "What's going on?" ]
  2. => " Tom says: /"What's going on?/" "
  3.  
  4. str = %Q/  Hello #{user.name}
  5.                         Welcome to GemBlog!
  6.                                                 galeki
  7.               /

 

 2. %W 和 %w [输入字符串数组]

很多时候,需要我们创建一个包含很多项的数组,而数组的每一项都是一个字符串,比如一个班级内所有的人名的数组,或者是一年12月的缩写数组等等,如果采用常规的创建方法:

  1. irb(main):022:0> month = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
  2. => ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

天,要打那么多的单引号,还有逗号,如果用%w就简单的多:

  1. irb(main):023:0> month = %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
  2. => ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]

仅仅需要把每一项用空格分隔,再包含在%w中就可以了。

%W和%w的区别和%Q和%q一样,一个代表双引号包含,一个代表单引号包含。

3. %r [正则表达式]

正则表达式一般以 re =/pattern/ 来创建,%r是另一种创建方式,优点是可以减少“/”对正则表达式本身的混淆,而且可以看情况选择%r后的分隔符,比如要想创建匹配linux某个路径的正则"/usr/local/bin/",用常规的方法,由于路径分隔符和“/”相同,就得对“/“进行转义:

  1. irb(main):030:0> re = ///usr//local//bin///
  2. => ///usr//local//bin///

这样写起来又麻烦,可读性也不好,如果用%r就方便多了:

  1. irb(main):027:0> re = %r{/usr/local/bin/}
  2. => ///usr//local//bin///

 

 4. %x [Shell命令]

 在ruby中执行shell命令很简单,只要把要执行的命令包含在反引号"`"中就行,但是反引号和单引号之间容易混淆,而且,有时命令本身也会用到反引号,这个时候,用%x就最好了:

  1. irb(main):036:0> %x{echo I am `whoami`, now is `date`}
  2. => "I am galeki, now is 2007/04/14 14:25/n"

 

 
原创粉丝点击