Refinements

User-defined functions can also have refinements, which are like switches that can be optionally specified when calling a function. In the following example, we define a sum function with a /avg refinement:

sum: func [arg1 arg2 /avg][    either avg [arg1 + arg2 / 2][arg1 + arg2]]sum 3 5       ;== 8sum/avg 3 5   ;== 4
A refinement is tested as a Boolean value with the same name, but without the /. Also, don't leave a space between the function name and the refinement when calling sum/avg

A refinement can also have a value, as shown in the following example:

div-sum: func [arg1 arg2 /div n][    either div [arg1 + arg2 / n][arg1 + arg2]]div-sum 3 5             ;== 8div-sum/div 3 5 4       ;== 2
Note that the refinement value follows the parameters. Better ...

Get Learn Red - Fundamentals of Red now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.