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 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