2011-10-13 28 views
2

我有这个RoR代码如下;检查正则表达式是否与RoR匹配?

1. error_regex = /\|FileName.exe\|((dlg|frm|cls).*?)/ 
2. error_regex.match(backtrace) 
3. if !error_regex.nil? 
4. file_name = error_regex[1].sub!(/\.zip/, '') 
5. file_name 
6. end 

所以我的问题是,这里发生了什么第3行。 我基本上没有回报经验,所以看着这段代码我把它看作 如果error_regex.nil不是零然后继续

但是最新的?对于 我不能只是做

if !error_regex.nil 

正则表达式都很好,我只是试图让我的头围绕这句法。

回答

3

问号用于表示按照惯例,该方法返回一个布尔值。类似的例子是include?为阵列,(返回true如果阵列具有给定元素中的话),empty?弦乐(返回true如果string == ""),和用于zero?整数(返回true如果int是零)。

所以这不是Rails的特定 - 它是特定于Ruby的。

1

问号是方法名称的一部分。没有它,你正在调用一种完全不同的方法。问号实际上并不是做的什么,这只是一个约定,正如Chris Bunch所说。但是因为Ruby已经命名了方法nil?,所以你必须这样称呼它。