Есть ли способ получить доступ к состоянию GenServer?
Есть ли встроенный способ увидеть текущее состояние GenServer? Вы всегда можете реализовать простой вызов для возврата состояния, но есть ли более общий способ?
Когда я запускаю: наблюдатель.старт, я могу посмотреть на запущенные приложения и увидеть их состояние, так что это кажется возможным. Но это может быть двойное секретное колдовство Эрланга, чтобы получить это.
1 ответ
Это зависит от того, как вы собираетесь его использовать.
Если получение состояния является частью вашей бизнес-логики, тогда да - это должно быть правильно смоделировано в вашем приложении с помощью GenServer.call
вернуть государство.
Если вам это нужно только с точки зрения отладки / понимания вашего приложения, вы можете использовать :sys.get_state
как это:
iex> :sys.get_state(pid)
# some state printed
Пожалуйста, знайте об этом:sys.get_state
примет либоpid
или имя сервера (если оно зарегистрировано под одним).
Также, пожалуйста, посмотрите на этот раздел об отладке с:sys
модуль в эликсире GenServer
документация как то очень полезная.
Надеюсь, это поможет!