0

我正在查看Michael Hartl 的在线书籍,并为他的Guardfile.

watch(%r{^app/controllers/(.+)_(controller)\.rb$})  do |m|
    ["spec/routing/#{m[1]}_routing_spec.rb",
     "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
     "spec/acceptance/#{m[1]}_spec.rb",
     (m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" : 
                       "spec/requests/#{m[1].singularize}_pages_spec.rb")]

最后一点有什么作用:

(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" : "spec/requests/#{m[1].singularize}_pages_spec.rb")])

我知道那m[1]将是控制器的名称,但该[/_pages/]部分完成了什么?

4

1 回答 1

0

您可以使用正则表达式从字符串中获取子字符串。它返回第一个匹配项,或者nil如果没有找到匹配项。

string = "foobar"
string[/[ab]/] # => "b"
string[/ab/]   # => nil

但是,Michael 使用它作为一个简单的检查正则表达式是否匹配。您可能已经看到它是用=~运算符编写的:

m[1] =~ /_pages/ ? something : something_else
于 2013-04-07T15:22:18.737 回答