我刚刚开始使用通用函数,想知道这是否可能(我真的希望如此!)。
我制作了 3 个包来处理不同长度的向量:vector2、vector3和vector4。
每个包都有处理该长度向量的函数:
vector2:normalize - for normalizing *vector2s*
vector3:normalize - for normalizing *vector3s*
etc.
我的向量是类型化数组(用于速度和内存使用,因为这是用于编写游戏)所以vector3是:
(make-array 3 :element-type `single-float).
现在我正在编写一个名为vectors的包,它将包含处理任何向量类型的通用函数。
所以传递 vector:normalize a vector3应该返回一个vector3等等。
我试过这个:
(defmethod v+1 ((vec-a #.(class-of (make-array 3
:element-type
`single-float)))
(vec-b #.(class-of (make-array 3
:element-type
`single-float))))
(v3:v+1 vec-a vec-b))
(defmethod v+1 ((vec-a #.(class-of (make-array 4
:element-type
`single-float)))
(vec-b #.(class-of (make-array 4
:element-type
`single-float))))
(v4:v+1 vec-a vec-b))
...基于我在问题 6083238中看到的内容,但显然只专注于简单的单浮点数组:
V> (class-of (make-array 4 :element-type `single-float))
#<BUILT-IN-CLASS SB-KERNEL::SIMPLE-ARRAY-SINGLE-FLOAT>
考虑到它需要快速且不占用内存,这样做的最佳方法是什么?
提前干杯!