self blocks
Craig Chambers
craig
Thu Dec 13 01:33:06 UTC 1990
Blocks in Self are not upwardly mobile (not non-LIFO); they may only be passed
downwards, not returned upwards. This is mostly an implementation restriction,
not a deep language issue. But you could simulate non-LIFO blocks (at least
in the situation you're describing) by manually building an object which
represents the closure with its lexical environment:
_AddSlots: ( |
cond_gen: par1 = ( | closure |
closure: ( |
par1.
value: par2 = ( par1 = par2 ).
| ).
closure par1: par1.
closure ).
| )
_AddSlots: ( |
test_if_equals_4 = cond_gen: 4
| )
test_if_equals_4 value: 4 "prints true"
(cond_gen: 'foo') value: 'bar' "prints false"
-- Craig Chambers
More information about the Self-interest
mailing list