Rails代码段解释

时间:2013-02-08 09:53:33

标签: ruby-on-rails ruby oop

我正在开发一个包含以下代码的应用程序:

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

逗号对它做了什么?

请帮忙

2 个答案:

答案 0 :(得分:2)

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

关于逗号,它的工作原理如下:

avar, bvar = "atest", "btest"

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

return app, options

所以它返回两个值。

希望有所帮助

答案 1 :(得分:1)

@ Craig-Taub回答了这个问题,
我只想补充一些注意事项:

Ruby命令是表达式,表示它们返回值,您可以将它们分配给变量 您可以在WikipediaPragProg上详细了解表达式和语句。

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