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

したがって、2 つの値が返されます。

それが役立つことを願っています

于 2013-02-08T09:54:12.257 に答える
1

@ Craig-Taubが質問に答えました、
私はいくつかのメモを追加したいと思います:

Rubyコマンドは式です。つまり、値を返し、変数に割り当てることができます。ウィキペディアPragProg
で式とステートメントの詳細を読むことができます。

2つ目は、コードブロックで複数の値を返す場合、Rubyはそれを単純な配列にラップし、呼び出し元に返します。
それがそのように機能する理由です。

于 2013-02-08T10:06:46.040 に答える