[REBOL] Re: [COLLECT] COLLECT function/Examples?
From: greggirwin::mindspring::com at: 12-May-2006 17:06
Hi Tim,
TJ> I'm seeing something strange on my system:
TJ> It appears that [throw] is suppressing the docstring.
TJ> Remove it or replace with [catch] and the docstring is enabled.
TJ> Are you getting the same?
Yes. I've seen this before. Putting the func attributes after the doc
string works as well. New version below. Thanks for "catching" that!
-- Gregg
collect: func [
{Collects values, returning them as a series.}
[throw]
'emit [word!] "Word used to collect values"
block [block!] "Block to evaluate"
/into dest [series!] "Where to append results"
/only "Insert series values as series"
] [
; Create a new context containing just one word (the EMIT
; argument) and set the 'emit word to refer to the new context
; word. Note the care taken to suppress possible conflicts and
; undesired evaluations.
emit: reduce [emit]
emit: first use emit reduce [emit]
use [dst ins] copy/deep [
; copy/deep lets us use just [] as the fallback value here.
dst: any [:dest []]
; make the function used to collect values.
ins: either only [[insert/only]] [[insert]]
set emit func [value [any-type!]] compose [
(ins) tail :dst get/any 'value
get/any 'value
]
do bind/copy block emit
head :dst
]
]