2

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

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

逗号对它有什么作用?

请帮忙

4

2 回答 2

2

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

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

avar, bvar = "atest", "btest"

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

return app, options

所以它返回两个值。

希望有帮助

于 2013-02-08T09:54:12.257 回答
1

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

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

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

于 2013-02-08T10:06:46.040 回答