patternMinor
Accessor functions in elisp
Viewed 0 times
functionselispaccessor
Problem
I'm writing some simple emacs tools for visual studio solutions.
I've got a function
Right now the return value on the last line of that function is `
I have written three getter functions to use with the list:
Does this getter and setter boilerplate code match best practices? Is there a shorter way to write it?
I've got a function
sln-process-csproj-file. This function takes the path to a project, and returns a tuple that's just a data model of the innards of the project.Right now the return value on the last line of that function is `
(,project-name ,project-path ,project-files).I have written three getter functions to use with the list:
(defun sln-project-name (project)
(nth 0 project))
(defun sln-project-path (project)
(nth 1 project))
(defun sln-project-files (project)
(nth 2 project))Does this getter and setter boilerplate code match best practices? Is there a shorter way to write it?
Solution
Yes, it can be shortened by using
Alternatively, if you want something more heavy weight, there is a CLOS-like object system.
defstruct. An example from the docs:(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])
⇒ tAlternatively, if you want something more heavy weight, there is a CLOS-like object system.
Code Snippets
(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])
⇒ tContext
StackExchange Code Review Q#42086, answer score: 8
Revisions (0)
No revisions yet.