REBOL 3 Docs Guide Concepts Functions Datatypes Errors
  TOC < Back Next >   Updated: 17-Aug-2010 Edit History  

REBOL 3 Functions: func

func  spec  body

Defines a user function with given spec and body.

Arguments:

spec [block!] - Help string (opt) followed by arg words (and opt type and string)

body [block!] - The body block of the function

See also:

closure   does   has   funco   funct   function   use   make   function?   return   exit  

Description

The func function creates new functions from a spec block and a body block.

General form:

name: func [spec] [body]

The spec block specifies the interface to the function. It can begin with an optional title string which used by the help function. That is followed by words that specify the arguments to the function. Each of argument can include an optional block of datatypes to specify the valid datatypes for the argument. Each may be followed by a comment string which describes the argument in more detail.

The argument words may also specify a few variations on the way the argument will be evaluated. The most common is 'word which indicates that a word is expected that should not be evaluated (the function wants its name, not its value). A :word may also be given which will get the value of the argument, but not perform full evaluation.

To add refinements to a function supply a slash (/) in front of an argument's word. Within the function the refinement can be tested to determine if the refinement was present. If a refinement is followed by more arguments, they will be associated with that refinement and are only evaluated when the refinement is present.

Local variables are specified after a /local refinement.

A function returns the last expression it evaluated. You can also use return and exit to exit the function. A return is given a value to return. exit returns no value.

sum: func [a b] [a + b]
print sum 123 321
444
sum: func [nums [block!] /average /local total] [
    total: 0
    foreach num nums [total: total + num]
    either average [total / (length? nums)][total]
]
print sum [123 321 456 800]
print sum/average [123 321 456 800]
425
print-word: func ['word] [print form word]
print-word testing
testing


  TOC < Back Next > REBOL.com - WIP Wiki Feedback Admin