Проблемы с пониманием: состояние в Clojure - PullRequest
4 голосов
/ 11 июля 2009

Я понимаю, что: состояние / делает /. Он создает поле, как в Java, в вашем классе. Что я не понимаю, в чем смысл этого? Кажется, я вижу, что это сделано только с классами, сгенерированными Clojure, которые расширяют другие классы. http://www.fatvat.co.uk/2009/05/clojure-and-robocode.html является одним из примеров. Я не знаю Java, и я не очень хорошо разбираюсь в объектно-ориентированном программировании. Может кто-нибудь объяснить смысл: заявить мне, и где все это вписывается в Java взаимодействия?

Большое спасибо!

ПРИМЕЧАНИЕ. Когда я говорю: состояние, я имею в виду (: gen-class: state)

Ответы [ 3 ]

4 голосов
/ 17 июля 2009

: состояние - это просто способ обмена некоторыми данными между функциями, сгенерированными как часть gen-класса. Думайте об этом как о точно таких же, как данные экземпляра объекта.

3 голосов
/ 11 сентября 2012

Более подробную информацию о state и о том, как ее инициализировать, можно найти в статье gen-class - как она работает и как ее использовать

Из статьи:

  • :state определяет метод, который будет возвращать состояние объекта.
  • :init определяет имя инициализатора. Это функция, которая должна возвращать вектор. Первый элемент снова является вектором аргументов конструктора суперкласса. В нашем случае это просто пустой вектор. Второй элемент - это состояние объекта.

Таким образом, init возвращает состояние объекта и вызывается при создании экземпляра объекта. state - это метод класса, в отличие от функции, которая будет возвращать то же значение, что и второй элемент в векторе, возвращаемом init.

Далее в статье показано, как использовать атом для изменения состояния объекта, если это необходимо.

2 голосов
/ 11 июля 2009

Я обсудил это с наемным работником на IRC-канале #Clojure, и он сказал мне, что главное в этом - состояние для каждого экземпляра. Это имеет смысл.

...