forked from rebol/rebol
Funct
angerangel edited this page Mar 19, 2013
·
1 revision
FUNCT spec body /with object /extern words
Defines a function with all set-words as locals.
FUNCT is a function value.
- spec -- Help string (opt) followed by arg words (and opt type and string) (block!)
- body -- The body block of the function (block!)
-
/with -- Define or use a persistent object (self)
- object -- The object or spec (object! block! map!)
-
/extern
- words -- These words are not local (block!)
#SOURCE
funct: make function! [ [
"Defines a function with all set-words as locals."
spec [block!] {Help string (opt) followed by arg words (and opt type and string)}
body [block!] "The body block of the function"
/with "Define or use a persistent object (self)"
object [object! block! map!] "The object or spec"
/extern words [block!] "These words are not local"
][
unless find spec: copy/deep spec /local [append spec [
/local
] ]
body: copy/deep body
append spec collect-words/deep/set/ignore body either with [
unless object? object [object: make object! object]
bind body object
append append append copy spec 'self words-of object words
] [
either extern [append copy spec words] [spec]
]
make function! reduce [spec body]
] ]