Sha*_*ter 4 lisp inheritance common-lisp
类可以在common-lisp中有多个构造函数和/或复制构造函数吗?那就是 - 为了创建一个新的向量类 - "vecr"来表示实数的三维向量,我想定义可以多种方式初始化的新类:
(vecr 1.2) ==> #(1.2 1.2 1.2)
Run Code Online (Sandbox Code Playgroud)
要么
(vecr 1.2 1.4 3.2) ==> #(1.2 4.3 2.5)
Run Code Online (Sandbox Code Playgroud)
要么
(vecr) ==> #(0.0 0.0 0.0)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何评论上述内容:
此函数可以很好地创建默认的#(0.0 0.0 0.0)类型的向量.但是,(vecr 1.0)==>#(1.0 0.0 0.0)而不是预期的#(1.0 1.0 1.0).我想这方面的方法是检查是否所有三个都被传递,或者只是一个可选参数. - Shamster 6小时前
你可以这样做:
(defun vecr (&optional (x 0.0) (y x) (z y))
(vector x y z))
Run Code Online (Sandbox Code Playgroud)