Проблемы с пониманием: состояние в Clojure
-
12-09-2019 - |
Вопрос
Я понимаю, что :state /делает/.Он создает поле, как в Java, в вашем классе.Чего я не понимаю, так это в чем смысл всего этого?Похоже, я вижу, что это делается только с помощью классов, сгенерированных Clojure, которые расширяют другие классы. http://www.fatvat.co.uk/2009/05/clojure-and-robocode.html это один из примеров.Я не знаю Java, и я не очень хорошо разбираюсь в объектно-ориентированном программировании.Может ли кто-нибудь объяснить мне суть:state и где все это согласуется с Java interop?
Большое спасибо!
ПРИМЕЧАНИЕ:Когда я говорю:state, я имею в виду (:gen-class :state)
Решение 3
Я обсудил это с hiredman на IRC-канале #Clojure, и он сказал мне, что суть этого заключается в состоянии для каждого экземпляра.В этом есть смысл.
Другие советы
:state - это просто способ обмена некоторыми данными между функциями, сгенерированными как часть gen-class.Думайте о нем как о точном совпадении с данными экземпляра объекта.
Дополнительная информация о state
а как его инициализировать, можно найти в статье gen-class - как это работает и как его использовать
Из статьи:
:state
определяет метод, который будет возвращать состояние объекта.:init
определяет имя инициализатора.Это функция, которая должна возвращать вектор.Первый элемент снова является вектором аргументов конструктора суперкласса.В нашем случае это просто пустой вектор.Второй элемент - это состояние объекта.
Подводя итог, init
возвращает состояние объекта и вызывается при создании экземпляра объекта. state
является методом класса, в отличие от функции, которая возвращает то же значение, что и второй элемент в векторе, возвращаемом init
.
Далее в статье показано, как использовать atom, чтобы иметь возможность изменять состояние объекта, если это необходимо.