在 CLTL2 中有一个结构体示例 ice-cream-factory
作为 follows ,据称它会创建两个构造函数。这是结构定义:
(defstruct (ice-cream-factory
(:constructor fabricate-factory
(&key (capacity 5)
location
(local-flavors
(case location
((hawaii) '(pineapple macadamia guava))
((massachusetts) '(lobster baked-bean))
((california) '(ginger lotus avocado
bean-sprout garlic))
((texas) '(jalapeno barbecue))))
(flavors (subseq (append local-flavors
'(vanilla
chocolate
strawberry
pistachio
maple-walnut
peppermint))
0 capacity)))))
(capacity 3)
(flavors '(vanilla chocolate strawberry mango)))
CLTL2 声明:
然而,评估标准构造函数会遇到未定义的函数错误:
(make-ice-cream-factory)
这是因为本书的部分内容不符合
defstruct
s 的最新标准吗?指定
:constructor
选项我只有一个构造函数 fabricate-factory
。 最佳答案
只有一个构造函数。如果它提到两个,那就是一个错误。
有关标准 Common Lisp 的详细信息,请查看 ANSI CL 标准和派生文档,例如 HyperSpec 中的 DEFSTRUCT 条目:
自从
(defstruct (ice-cream-factory
(:constructor fabricate-factory
(&key (capacity 5)
location
(local-flavors
(case location
((hawaii) '(pineapple macadamia guava))
((massachusetts) '(lobster baked-bean))
((california) '(ginger lotus avocado
bean-sprout garlic))
((texas) '(jalapeno barbecue))))
(flavors (subseq (append local-flavors
'(vanilla
chocolate
strawberry
pistachio
maple-walnut
peppermint))
0 capacity)))))
(capacity 3)
(flavors '(vanilla chocolate strawberry mango)))
有一个名为
fabricate-factory
的构造函数,将不会创建默认名称构造函数。关于struct - Common Lisp The Language 2 过时了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59009326/