- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]

From: Brian Denheyer <briand_at_seanet.com>

Date: Sun, 28 Nov 1999 22:19:11 -0800 (PST)

Here's the situation :

(define-class <foo> ()

((descriptive-value)

(calc-value)))

descriptive-value is a value which is meaningful to the user such as

%. calc-value is a value used internally which is calculated from

descriptive-value. It only needs to be recalculated when

descriptive-value changes.

My first thought was to make descriptive-value a virtual slot with a

setter which will update calc-value. Since there is an actual value

associated with descriptive-value it doesn't make sense to do this.

So the only plan I've come up with so far is to have 3 slots. once

holds descriptive-value, one holds calc-value and the third is a

virtual slot which is used to access descriptive-value and forces

calc-value to be updated. Here's my solution :

(define-class <foo> ()

((descriptive-value :accessor descriptive-value)

(calc-value :accessor calc-value)

(v-value :slot-set! (lambda (self value)

(set! (descriptive-value self) value)

(set! (calc-value

(calculation-of-some-sort value))))

:slot-ref (lambda (self)

(calc-value self)))))

So in effectm calc-value should really be called "cache-value".

For some reason I think there should be a better way. For one thing

if you have to do this 2 or 3 times in a class it's sort of tedious

keeping all the slot names straight.

It turns out I run into this on a fairly regular basis, so I'm looking

for a more elegant/uniform solution.

Any ideas ?

Thanks

Brian

P.S. For a 100pt bonus, what's a good way to do this if "cache-value"

depends on more than 1 slot...

Received on Mon Nov 29 1999 - 07:19:00 CET

Date: Sun, 28 Nov 1999 22:19:11 -0800 (PST)

Here's the situation :

(define-class <foo> ()

((descriptive-value)

(calc-value)))

descriptive-value is a value which is meaningful to the user such as

%. calc-value is a value used internally which is calculated from

descriptive-value. It only needs to be recalculated when

descriptive-value changes.

My first thought was to make descriptive-value a virtual slot with a

setter which will update calc-value. Since there is an actual value

associated with descriptive-value it doesn't make sense to do this.

So the only plan I've come up with so far is to have 3 slots. once

holds descriptive-value, one holds calc-value and the third is a

virtual slot which is used to access descriptive-value and forces

calc-value to be updated. Here's my solution :

(define-class <foo> ()

((descriptive-value :accessor descriptive-value)

(calc-value :accessor calc-value)

(v-value :slot-set! (lambda (self value)

(set! (descriptive-value self) value)

(set! (calc-value

(calculation-of-some-sort value))))

:slot-ref (lambda (self)

(calc-value self)))))

So in effectm calc-value should really be called "cache-value".

For some reason I think there should be a better way. For one thing

if you have to do this 2 or 3 times in a class it's sort of tedious

keeping all the slot names straight.

It turns out I run into this on a fairly regular basis, so I'm looking

for a more elegant/uniform solution.

Any ideas ?

Thanks

Brian

P.S. For a 100pt bonus, what's a good way to do this if "cache-value"

depends on more than 1 slot...

Received on Mon Nov 29 1999 - 07:19:00 CET

*
This archive was generated by hypermail 2.3.0
: Mon Jul 21 2014 - 19:38:59 CEST
*