【发布时间】:2012-10-09 02:09:41
【问题描述】:
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?
【问题讨论】:
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?
【问题讨论】:
m[1] 将是正则表达式匹配中的第一个捕获组。从正则表达式中,这是文件的名称(不带扩展名。)
这实际上在 README 中有解释:
guard :rspec do
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
end
在此示例中,正则表达式捕获组 (.+) 用于将 lib 文件夹中的文件更改转换为 spec 文件夹中的测试用例。正则表达式监视模式与 Regexp#match 匹配。
【讨论】:
m 是来自正则表达式的匹配项。请参阅http://www.ruby-doc.org/core-1.9.3/Regexp.html#method-i-match 了解更多信息。
基本上 m[1] 用于获取匹配的文件的名称,以运行相应的规范。
【讨论】: