Вопрос

Я понимаю, что :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, чтобы иметь возможность изменять состояние объекта, если это необходимо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top