【问题标题】:Rails code segment explainedRails 代码段解释
【发布时间】:2013-02-08 09:53:32
【问题描述】:

我正在开发具有以下代码的应用程序:

def app
  @app ||= begin
    if !::File.exist? options[:config]
      abort "configuration #{options[:config]} not found"
    end

    app, myoptions = Rack::Builder.parse_file(self.options[:config], opt_parser)
    self.myoptions.merge! myoptions
    app
  end
end

我很难理解其中的几个部分..

@app||= begin...end

这是否意味着如果@app 不存在,则运行该块?

app ,options = rack::builder

逗号对它有什么作用?

请帮忙

【问题讨论】:

    标签: ruby-on-rails ruby oop


    【解决方案1】:

    您的第一个假设是正确的,它确实表明如果 @app 为 nil,请将其设置为以 begin, end 分隔的块中返回的任何内容。

    关于逗号,它是这样工作的:

    avar, bvar = "atest", "btest"
    

    如果您查看Rack:Builder.parse_file 的源代码,您会注意到最后一行

    return app, options
    

    所以它返回两个值。

    希望有帮助

    【讨论】:

      【解决方案2】:

      @Craig-Taub 回答了这个问题,
      我只是想添加一些注释:

      Ruby 命令是表达式,这意味着它们会返回值,您可以将它们分配给变量。
      您可以在 WikipediaPragProg 上阅读有关表达式和语句的更多信息。

      其次,当你在一个代码块中返回多个值时,Ruby 会将它包装成一个简单的数组,然后返回给调用者。
      这就是它这样工作的原因。

      【讨论】:

        猜你喜欢
        • 2013-08-24
        • 2014-11-14
        • 2015-06-23
        • 2018-06-11
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多