code: public function dispatch(RequestInterface $request, ParameterMap $map = null)
      {
          $this->validateRoutePath($request);
  
          /**
           * Maching result of reqeust handler
           * @var array|bool
           */
          $requestMatching = $this->matcher->match($request);
  
          if ($map === null) {
              if ($requestMatching['handler'] instanceof MethodProc) {
                  $requestMatching['handler']->execConstructor();
              }
              return $requestMatching['handler']->exec($requestMatching['urlNameMatching']);
          }
  
          if ($requestMatching['handler'] instanceof MethodProc) {
              $requestMatching['handler']->execConstructorWithParameterMap($map);
          }
          return $requestMatching['handler']->execWithParameterMap($map);
      }
docs: If $map argument is null,
  Dispatcher call a handler with a argument about array of url matching result.
  otherwise,
  Dispatcher call a handler with matcing arguments by ParameterMap
  
  @param RequestInterface $request
  @param ParameterMap $map
  @return mixed return value of dispatch handler
  @throws RoutePathNotFound