【问题标题】:What is the significance of m[1] in a Guardfile?Guardfile 中 m[1] 的意义是什么?
【发布时间】:2012-10-09 02:09:41
【问题描述】:

来自Guardfile examples

watch(%r{^app/(.+)\.rb})    { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+)\.rb})    { |m| "spec/lib/#{m[1]}_spec.rb" }

m 的值代表什么?好像是一个长度为2的数组,存放完整路径和相对路径……

m 是如何生成的?它来自 Guard 还是 Ruby?

【问题讨论】:

    标签: ruby tdd guard


    【解决方案1】:

    m[1] 将是正则表达式匹配中的第一个捕获组。从正则表达式中,这是文件的名称(不带扩展名。)

    这实际上在 README 中有解释:

    guard :rspec do
      watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
    end
    

    在此示例中,正则表达式捕获组 (.+) 用于将 lib 文件夹中的文件更改转换为 spec 文件夹中的测试用例。正则表达式监视模式与 Regexp#match 匹配。

    【讨论】:

      【解决方案2】:

      m 是来自正则表达式的匹配项。请参阅http://www.ruby-doc.org/core-1.9.3/Regexp.html#method-i-match 了解更多信息。

      基本上 m[1] 用于获取匹配的文件的名称,以运行相应的规范。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-16
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2011-08-16
        相关资源
        最近更新 更多