Время для вызова `супер` - PullRequest
0 голосов
/ 18 октября 2018

Я должен понимать этот фрагмент кода:

module Stealth
  module MixpanelSessionTracking
    def set(flow:, state:)
      retval = super

      if ENV['MIXPANEL_PROJECT_TOKEN'].present?
        mixpanel = Stealth::Mixpanel.new
        mixpanel.tracker.track(user_id, 'State Change', {
          'flow' => flow,
          'state' => state
        })
      end

      retval
    end
  end

  class Session
    prepend Stealth::MixpanelSessionTracking
  end

end

Почему я устанавливаю super в setval переменную, и прежде чем я вызову retval переменную в конце определения метода?

Могу ли я просто использовать super в конце определения метода?

РЕДАКТИРОВАТЬ:

Метод класса предшественника:

module Stealth
  class Session
    (...)
    def set(flow:, state:)
      store_current_to_previous(flow: flow, state: state)

      @flow = nil
      @session = canonical_session_slug(flow: flow, state: state)

      Stealth::Logger.l(topic: "session", message: "User #{user_id}: setting session to #{flow}->#{state}")
      $redis.set(user_id, session)
    end
    (...)
  end
end

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Хорошее описание того, что super в документах ruby ​​ там и ответ на stackoverflow :

super действует как вызов метода, который вызывает суперклассРеализация метода.В вашем примере ключевое слово return возвращается из Parent :: test и продолжает выполнение Child :: test, как и любой другой вызов метода.

В вашем случае кто-то просто определит retval как super а затем в коде используйте retval вместо super.

0 голосов
/ 18 октября 2018

Прежде всего, вам нужно увидеть ancestors для вашего класса это будет похоже на [Stealth :: MixpanelSessionTracking, Session], потому что вы используете prepend.

Затем вы вызываете set сначалавызовите Stealth :: MixpanelSessionTracking и метод super inside set из класса Session из-за цепочки предков с prepend.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...