Did you know that you can navigate the posts by swiping left and right?

避免使用Ruby中古怪的Perl风格语法

2016-06-05 . 编程 . 评论
#Effective Ruby

Ruby中很多的语法风格都受到Perl语言影响,其中就包括”$”开头的全局变量。常见的有以下这些:

$    
符号 意义 别名(require ‘English’)
$! 传给raise的异常信息 $ERROR_INFO
$@ 异常引起的错误堆栈 $ERROR_POSITION
$& 基于$~,正则匹配到的字段的的全部内容 $MATCH
$` 基于$~,正则匹配到的字段的左边内容 $PREMATCH
$’ 基于$~,正则匹配到的字段的右边内容 $POSTMATCH
$+ 基于$~,正则匹配到的字段的最后一段内容 $LAST_PAREN_MATCH
$n 正则匹配到的第n组  
$~ 正则匹配到的数据。仅限于当前进程的当前方法 $LAST_MATCH_INFO
$= 大小写敏感标志位,弃用。 $IGNORECASE
$/ 输入分隔符,默认为换行符 $RS 或者 $INPUT_RECORD_SEPARATOR
$\ 输出分隔符,默认为nil $ORS 或者 $OUTPUT_RECORD_SEPARATOR
$, print和Array#join的输出分隔符,默认为nil $OFS 或者 $OUTPUT_FIELD_SEPARATOR
$; String#split的默认分隔符 $FS 或者 $FIELD_SEPARATOR
$. The current line number of the last file from input. $NR 或者 $INPUT_LINE_NUMBER
$< 同 ARGF. $DEFAULT_INPUT
$> print, printf的默认输出 $DEFAULT_OUTPUT
$_ 读取到的输入行,默认为nil。 $LAST_READ_LINE
$0 被执行的脚本的名字。  
$* 输入参数 $ARGV
$$ 当前Ruby进程ID $PID 或者 $PROCESS_ID
$? 子进程的exit code。只读参数。 $CHILD_STATUS
$: 用require加载的库的目录 $LOAD_PATH.
$” 用require导入的库和模块  

用“=~”方法匹配字符串的时候,会创建特殊的全局变量,$1,$2…但其作用域只在当前进程的当前方法。

用“$:”方法表示用require加载的库的目录。

用“$_”方法,表示输入读取标准输入中的一行,就像readline方法

为了书写和使用的方便,这些方法主要使用在脚本中。但在平时编写的代码中,使用以上这些全局变量,却会使得代码的可读性下降。所以一般不推荐使用。其替代方法,即为第三列中的别名。使用别名时,需要引入English库。这样就会使得代码的可读性相对提高。

引用:部分翻译自:http://www.zenspider.com/Languages/Ruby/QuickRef.html#pre-defined-variables