我写了多项类沿线描述sic颗粒2.5.3(除了使用defclass).我想可以无缝地加和乘多项式和定期数字,但我不能让变化级接受一些.

我试图简化的问题可以通过改变类从整数浮动:

(change-class 4 'float)

但这给了我错误:

There is no applicable method for the generic function
#<STANDARD-GENERIC-FUNCTION CHANGE-CLASS (7)>
when called with arguments
(4 #<BUILT-IN-CLASS FLOAT>).
[Condition of type SIMPLE-ERROR]

我得到一个错误的相同的形式(仅供参考):

(change-class 4 'polynomial)

我要继续前进和实现的手工转换,但我更愿意使用内在clos设施。

作为Xach指出,我可以使用强迫或浮动,以改变4个浮动。这是旨在作为一个简单的例子什么的我想要做,以消除任何可能的,我的更新实例为不同的类是错误的。

这里是再版本的我试过,没有工作:

(defclass polynomial ()
 ((var :accessor var :initarg :var :initform 'x)
  (terms :accessor terms :initarg :terms :initform (make-empty-term-list))))

(defmethod update-instance-for-different-class :before ((old number) 
                        (new polynomial)
                        &key)
    (setf (slot-value new 'terms) (adjoin-term (make-term old 0)
                           (make-empty-term-list))))

(change-class 4 'polynomial)

我还是会得到一个错误就像上面的例子:

There is no applicable method for the generic function
  #<STANDARD-GENERIC-FUNCTION CHANGE-CLASS (7)>
when called with arguments
  (4 #<STANDARD-CLASS POLYNOMIAL>).
   [Condition of type SIMPLE-ERROR]
有帮助吗?

解决方案

你不可以利用的变化类数字。数字是不实例CLOS课程。更改类也被认为 破坏性 修改的一个实例,一个新的类,而不改变身份的原来的实例。

我会:

  • 添加方法的改变等,不会你想要什么

  • 或者写一功能的变化,实现各种定义胁迫的规则,并呼吁更改类的任何改变从一个CLOS流的另一个CLOS类。

其他提示

可以使用强迫或FLOAT做到这一点:

(float 4) => 4.0
(coerce 4 'float) => 4.0
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top