红宝石匹配正则表达式

时间:2014-08-17 22:18:26

标签: ruby regex require

我试图要求文件夹中的所有文件。我有以下内容。

    Dir.foreach File.expand_path("app/models") do |file|
        require file unless file === /^\./
    end

然而,它失败了。当我打开一个ruby控制台时,我尝试以下操作:

"." === /^\./

并且评估为false。为什么它不匹配?

1 个答案:

答案 0 :(得分:1)

===运算符实际上是左侧对象的一种方法。

在这种情况下,===上的操作数顺序很重要,因为如果字符串文字"."排在第一位,则会计算String equality operator (method) String#===。如果正则表达式文字位于左侧,则使用the Regexp operator Regexp#===

扭转你的操作数。

# The string "." isn't equal to the Regexp object
>> "." === /^\./
=> false

# With the regexp as the left operand:
>> /^\./ === "."
=> true

# With the string on the left, you may use =~ and test for nil as a non-match
>> "." =~ /^\./
=> 0