在 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/

10-15 08:26