11.2 类与实例 (Class and Instances)

在 4.6 节时,我们看过了创建结构的两个步骤:我们调用 defstruct 来设计一个结构的形式,接着通过一个像是 make-point 这样特定的函数来创建结构。创建实例 (instances)同样需要两个类似的步骤。首先我们使用 defclass 来定义一个类别 (Class):

  1. (defclass circle ()
  2. (radius center))

这个定义说明了 circle 类别的实例会有两个槽 (slot),分别名为 radiuscenter (槽类比于结构里的字段 「field」)。

要创建这个类的实例,我们调用通用的 make-instance 函数,而不是调用一个特定的函数,传入的第一个参数为类别名称:

  1. > (setf c (make-instance 'circle))
  2. #<CIRCLE #XC27496>

要给这个实例的槽赋值,我们可以使用 setf 搭配 slot-value

  1. > (setf (slot-value c 'radius) 1)
  2. 1

与结构的字段类似,未初始化的槽的值是未定义的 (undefined)。