REBOL Programming/closure

USAGE:Edit

CLOSURE spec body 

DESCRIPTION:Edit

Defines a closure function.

CLOSURE is a function value.

ARGUMENTSEdit

  • spec -- Help string (opt) followed by arg words (and opt type and string) (Type: block)
  • body -- The body block of the function (Type: block)

(SPECIAL ATTRIBUTES)Edit

  • catch

SOURCE CODEEdit

closure: func [
    "Defines a closure function." 
    [catch] 
    spec [block!] {Help string (opt) followed by arg words (and opt type and string)} 
    body [block!] "The body block of the function" 
    /local spc bdy word
][
    spc: make block! 1 + (2 * length? spec) 
    insert/only spc [throw] 
    bdy: make block! 5 + length? spec 
    insert bdy reduce [:do :make :function! spc body] 
    parse spec [any [
            set-word! | set word any-word! (
                insert tail bdy to word! :word 
                insert tail spc to get-word! :word 
                insert/only tail spc [any-type!]
            ) | skip
        ]] 
    throw-on-error [make function! spec bdy]
]
Last modified on 27 October 2012, at 22:15