麻烦理解:Clojure中的状态

时间:2009-07-11 00:26:15

标签: clojure clojure-java-interop gen-class

我明白了什么:state / does /。它会在您的类中创建一个字段,就像在Java中一样。我不明白的是这是什么意思?看起来我只看到Clojure生成的类扩展了其他类。 http://www.fatvat.co.uk/2009/05/clojure-and-robocode.html就是一个例子。我不懂Java,而且我不太熟悉面向对象编程。有人可以解释一下这个问题:向我说明,以及它与Java互操作的关系在哪里?

非常感谢!

注意:当我说:州,我指的是(:gen-class:state)

3 个答案:

答案 0 :(得分:4)

:state只是在作为gen-class的一部分生成的函数之间共享一些数据的一种方式。可以认为它与对象的实例数据完全相同。

答案 1 :(得分:3)

有关state的更多信息以及如何对其进行初始化,请参阅文章gen-class – how it works and how to use it

来自文章:

  • :state定义了一个返回对象状态的方法。
  • :init定义初始化程序的名称。这是一个必须返回向量的函数。第一个元素又是超类构造函数的参数向量。在我们的例子中,这只是空矢量。第二个元素是对象的状态。

总之,init返回对象的状态,并在实例化对象时调用。 state是类的一个方法,与函数相反,它将返回与init返回的向量中的第二个元素返回的相同值。

然后,文章继续展示如何使用原子来改变对象的状态(如果需要)。

答案 2 :(得分:2)

我在#Clojure IRC频道上与hiredman讨论过,他告诉我,它的主要观点是每个实例的状态。这是有道理的。