2018-06-18

Rodaコードリーディング

を生成して、それを引数に#consumeメソッドを呼び出します。 def consume(pattern) if matchdata = remaining_path.match(pattern) @remaining_path = matchdata.post_match captures = matchdata.captures captures = yield(*captures) if block_given? @captures.concat(captures) end end

remaining_pathがパターンにマッチした場合はpost_matchした部分をremaining_pathに入れてから、@capturesにマッチしたパラメータをセットします。

この@capturesはmatch_allのif文内のyieldの引数として指定されます。yieldされるブロックは#getで指定されたブロックになります。 def if_match(args) path = @remaining_path @captures.clear

      if match_all(args)
        block_result(yield(*captures))
        throw :halt, response.finish
      else

...

こうしてパスから正規表現を使ってパラメータを抽出してブロックの引数としてセットしています。]]>

このエントリーをはてなブックマークに追加