Guard文件中m [1]的意义是什么?

时间:2012-10-18 14:59:24

标签: ruby tdd guard

来自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?

2 个答案:

答案 0 :(得分:2)

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

这实际上在README中解释了:

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

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

答案 1 :(得分:1)

m是来自Regex的匹配。有关详细信息,请参阅http://www.ruby-doc.org/core-1.9.3/Regexp.html#method-i-match

除此之外,m [1]用于获取匹配文件的名称,以运行相应的规范。