1. %Q 和 %q [输入字符串]
一般情况下,字符串常量是包含在 " " 和 ' ' 两个符号中间的,也就是双引号和单引号:
-
irb (main ): 003: 0> str = "GemBlog beta 0.4"
-
=> "GemBlog beta 0.4"
-
irb (main ): 004: 0> str1 = 'Hi there!'
-
=> "Hi there!"
双引号、单引号,与其对应的就是%Q和%q,虽然使用引号来包含字符串已经足够,但是在某些情况下,还是应%Q和%q方便,比如字符串中含有单双引号,还有字符串跨越多行的时候:
-
irb (main ): 012: 0> str = %q [ Tom says: "What's going on?" ]
-
=> " Tom says: /"What's going on?/" "
-
-
str = %Q/ Hello #{user.name}
-
Welcome to GemBlog!
-
galeki
-
/
2. %W 和 %w [输入字符串数组]
很多时候,需要我们创建一个包含很多项的数组,而数组的每一项都是一个字符串,比如一个班级内所有的人名的数组,或者是一年12月的缩写数组等等,如果采用常规的创建方法:
-
irb (main ): 022: 0> month = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
-
=> [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
天,要打那么多的单引号,还有逗号,如果用%w就简单的多:
-
irb (main ): 023: 0> month = %w (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec )
-
=> [ "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/",用常规的方法,由于路径分隔符和“/”相同,就得对“/“进行转义:
-
irb (main ): 030: 0> re = ///usr//local//bin///
-
=> ///usr//local//bin///
这样写起来又麻烦,可读性也不好,如果用%r就方便多了:
-
irb (main ): 027: 0> re = %r {/usr/local/bin/ }
-
=> ///usr//local//bin///
4. %x [Shell命令]
在ruby中执行shell命令很简单,只要把要执行的命令包含在反引号"`"中就行,但是反引号和单引号之间容易混淆,而且,有时命令本身也会用到反引号,这个时候,用%x就最好了:
-
irb (main ): 036: 0> %x {echo I am `whoami`, now is `date` }
-
=> "I am galeki, now is 2007/04/14 14:25/n"