假设我有这个:
(defstruct (derp
(:constructor
make-derp
(&key (dimension 4))))
(some-bits (make-array (list dimension dimension)
:element-type 'bit
:initial-element 0)))
我希望能够(声明(输入...)blahblahblah)'dimension'参数。现在它接受任何价值。当然,make-array会在0或更少时出错,但我也想声明类型在一个范围内,或者我想要使用的其他任何声明类型。
所以无论如何,我尝试将(声明(类型(整数1 32)维))添加到此defstruct中的各个位置,但它总是会产生不同的错误。
通过Google随意搜索这些条款,没有运气。
这可以以某种方式完成吗?
答案 0 :(得分:4)
你为什么要宣布它?为什么不检查类型?
(defstruct (derp
(:constructor
make-derp (&key (dimension 4))))
(some-bits (progn
(check-type dimension (integer 0 10))
(make-array (list dimension dimension)
:element-type 'bit
:initial-element 0))))
一般来说,上面可能不够强大。然后,我建议编写一个MAKE-SOMETHING
函数,该函数会提前进行检查。
请注意,您还可以声明插槽本身的类型。有些CL会在某些情况下检查。