我正在为visual解决方案编写一些简单的emacs工具。
我有一个函数sln-process-csproj-file。这个函数选择一个项目的路径,并返回一个元组,它只是项目内部的一个数据模型。
现在,该函数最后一行的返回值是`(,project-name ,project-path ,project-files)。
我编写了三个getter函数用于列表:
(defun sln-project-name (project)
(nth 0 project))
(defun sln-project-path (project)
(nth 1 project))
(defun sln-project-files (project)
(nth 2 project))这个getter和setter样板代码匹配最佳实践吗?有更短的方法来写吗?
发布于 2014-02-19 01:05:11
是的,用defstruct可以缩短它。文档中的一个示例:
(cl-defstruct person name age sex)
(setq dave (make-person :name "Dave" :sex 'male))
⇒ [cl-struct-person "Dave" nil male]
(setq other (copy-person dave))
⇒ [cl-struct-person "Dave" nil male]
(eq dave other)
⇒ nil
(eq (person-name dave) (person-name other))
⇒ t
(person-p dave)
⇒ t
(person-p [1 2 3 4])
⇒ nil
(person-p "Bogus")
⇒ nil
(person-p '[cl-struct-person counterfeit person object])
⇒ t或者,如果你想要更重的东西,就有一个CLOS类对象系统。
https://codereview.stackexchange.com/questions/42086
复制相似问题