代码之家  ›  专栏  ›  技术社区  ›  Tyler DeWitt

m[1][/_pages/]防护文件中

  •  0
  • Tyler DeWitt  · 技术社区  · 12 年前

    我在看 Michael Hartl's online book 并发现了他的正则表达式行 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/] 部分完成?

    1 回复  |  直到 12 年前
        1
  •  0
  •   iain    12 年前

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

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

    然而,Michael将其用作正则表达式是否匹配的简单检查。你可能看到它写着 =~ 操作员:

    m[1] =~ /_pages/ ? something : something_else