【问题标题】:Ruby: What does $1 mean?鲁比:1 美元是什么意思?
【发布时间】:2012-02-25 04:12:34
【问题描述】:

我正在观看关于多态关联的 RailsCast。 http://railscasts.com/episodes/154-polymorphic-association?view=asciicast

共有三个不同的模型文章、照片和事件,每个模型都从 Comment.rb 中获取评论。 (文章、照片和事件中的每一个都有 article_id、photo_id 和 event_id)。在列出 cmets 时,他有一个问题是要找出列出 cmets 的 3 个模型中的哪一个,所以他在索引操作中这样做

def index
  @commentable = find_commentable
  @comments = @commentable.comments
end


def find_commentable
  params.each do |name, value|
    if name =~ /(.+)_id$/
      return $1.classify.constantize.find(value)
    end
  end
  nil
end

我的问题是,$1 是什么?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    根据Avdi Grimm from RubyTapas

    $1 是一个全局变量,可以在后面的代码中使用:

     if "foobar" =~ /foo(.*)/ then 
        puts "The matching word was #{$1}"
     end
    

    输出

    "匹配的单词是 bar"

    简而言之,$1、$2、$... 是一些 ruby​​ 库函数使用的全局变量,特别是与 REGEX 相关的一些函数,以便程序员在以后的代码中使用这些发现。

    See this 了解更多 Ruby 中可用的变量。

    【讨论】:

    • 它仅在使用相等波浪号运算符时创建??
    • 是的,$1$2 等匹配最后一个正则表达式中的第一个、第二个等带括号的组 - 请参阅答案中的链接。 Rubocop 建议使用 Regexp.last_match(n) 代替(注意 n 是从零开始的,所以 $1 == #last_match(0)
    【解决方案2】:

    $1 是从上面的正则表达式/(.+)_id$/ 匹配的组。 $1 变量是括号中匹配的字符串。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 2020-01-20
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多