gpt4 book ai didi

common-lisp - 使用点符号访问 CLOS 槽

转载 作者:行者123 更新时间:2023-12-02 20:04:26 28 4
gpt4 key购买 nike

访问类槽时,而不是写入

(defmethod get-name ((somebody person) (slot-value somebody 'name))

是否可以使用点符号(又名 C++),即

(defmethod get-name ((somebody person) somebody.name) ?

否则,当方法中有很多槽操作时,(slot-value... 会创建大量样板代码。

我今天已经找到了答案,我只是将其作为问答发布,但是如果有更好的解决方案或者我的解决方案存在我应该预期的问题,请随时添加新的答案或评论。

最佳答案

图书馆access提供了一个点符号读取器宏来访问槽(以及哈希表和其他东西)。通过调用 (access:enable-dot-syntax) 启用阅读器宏后,您将能够使用#D。使用其他语言中流行的点语法访问插槽名称。

(defclass person ()
((name :initarg :name :reader name)))

CL-USER> (access:enable-dot-syntax)
; No values
CL-USER> (defvar *foo* (make-instance 'person :name "John Smith"))
*FOO*
CL-USER> #D*foo*
#<PERSON #x302001F1E5CD>
CL-USER> #D*foo*.name
"John Smith"

如果您不想使用阅读器宏,还有一个 with-dot

CL-USER> (access:with-dot () *foo*.name)
"John Smith"

关于common-lisp - 使用点符号访问 CLOS 槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183349/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com