Bastian Müller wrote:
Hi,
I'm currently using cells and it works very well, except one thing seems a little unhandy:
When defining a model it's possible to use (c-in ..) as an initform to define a slot as a cell, but when instantiating a class you have to supply (c-in ...) instead the normal value, eg.
(defmodel x () ((y :accessor y :initarg :y :initform (c-in nil)) ...))
(let ((test (make-instance 'x :y (c-in 1)))) (setf (y test) 2))
works, but instead sth like
(let ((test (make-instance 'x :y 1))) (setf (y test) 2))
would be nice.
I have in fact considered such a thing (making c-input the default) but decided it was cray. A premise being that if you need a lot of c-inputs you are not really using Cells. So c-input is the rare one, and those should stand out and require a declaration from the programmer.
I tried it with
(defmethod initialize-instance ((self x) &rest rest) (loop for slot in rest by #'cddr do (let ((value (getf rest slot)) (name (intern (symbol-name slot)))) (setf (slot-value self name) (c-in value)))))
but I just get:
The slot CELLS::.CELLS is unbound in the object #<X {10032D5FC1}>. [Condition of type UNBOUND-SLOT]
Is there any way to get this behavior?
A whole lot of work, off the top of my head, but nothing profound cells-wise.
kt