我是形成的一类对某些工作对分子动态如下:

(defclass %atom (particle)
  ((name :initarg :name :initform (error "Every atom in the system must have a name!"))
   (mass :accessor mass :initarg :mass :initform (getmass name))
   (charge :accessor charge :initarg :charge :initform (getcharge name))))

最初我想,我可以以某种方式参考其他隙内的类的定义与一个即initform(getmass名称)-但这是不真实的(或不是吗!?).相反,我告知,初始化-实例将是把所有初始化的东西...公平的。

这个问题我有,那么,是时是:initform使用?有什么惯用的偏好吗?我已经看到了它用作上述用于产生(错误"...")代码,并且还默认初始化论点的时候:initarg是没有提供。但那些可以很容易地融入初始化-实例和可能更有意义。是否有一个特定的方式:initform一般使用?

有帮助吗?

解决方案

通常会使用:initform给一个老虎的一些缺省值。与defclass一个不能计算initforms只是基于其他隙。还有其他并发症,因此:initform应当使用简单的形式。

  • 设置z槽的一个3d-矢量对象为0.0

  • 设置列表的windows在屏幕上目零

  • 设定的'关键职能'隙在一个对象#'身份

  • 设置'的报告string'隙在一个错误"的错误出现"

任何其他更复杂的设立的槽的价值观应该以一种方法。如果对象需要设立之后自动化实例的使用:在方法来初始化-实例。

其他提示

要的东西一点点进一步复杂化,还存在class选项:默认-initargs 的。

我个人使用:default-initargs:initform作为当槽不具有initialize-instance不需要用于:initform的后方法的全部功率时快捷方式和:initarg

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top