【问题标题】:m[1][/_pages/] In Guardfilem[1][/_pages/] 在 Guardfile
【发布时间】:2013-04-07 23:22:18
【问题描述】:

我正在查看 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/] 部分完成了什么?

【问题讨论】:

    标签: ruby-on-rails tdd guard


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2018-10-21
      • 2018-08-18
      • 1970-01-01
      • 2014-04-26
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多