
Func models an executable subroutine. Functions are typed by a formal parameter list and return value (or Void if no return). Functions are typically defined as method slots on a type, but may also be defined via functional programming constructs such closures and the &
operator.
An immutable function is guaranteed to not capture any state from its thread, and is safe to execute on other threads. The compiler marks functions as immutable based on the following analysis:
- static methods are always automatically immutable
- instance methods on a const class are immutable
- instance methods on a non-const class are never immutable
- closures which don't capture any variables from their scope are automatically immutable
- curried functions which only capture const variables from their scope are automatically immutable
See docLang::Functions for details.
Slots
- call
-
Dynamically invoke this function with the specified arguments and return the result. If the function has Void return type, then null is returned. The argument list must match the number and type of required parameters. If this function represents an instance method (not static and not a constructor) then the first argument must be the target object. If the function supports default parameters, omit arguments to use the defaults. It is permissible to pass more arguments then the number of method parameters - the additional arguments are ignored. If no arguments are required, you may pass null for args.
- call0
-
virtual R call0()
Optimized convenience for call([,]).
- call1
-
Optimized convenience for call([a]).
- call2
-
Optimized convenience for call([a, b]).
- call3
-
virtual R call3(A a, B b, C c)
Optimized convenience for call([a, b, c]).
- call4
-
virtual R call4(A a, B b, C c, D d)
Optimized convenience for call([a, b, c, d]).
- call5
-
virtual R call5(A a, B b, C c, D d, E e)
Optimized convenience for call([a, b, c, d, e]).
- call6
-
virtual R call6(A a, B b, C c, D d, E e, F f)
Optimized convenience for call([a, b, c, d, e, f]).
- call7
-
virtual R call7(A a, B b, C c, D d, E e, F f, G g)
Optimized convenience for call([a, b, c, d, e, f, g]).
- call8
-
virtual R call8(A a, B b, C c, D d, E e, F f, G g, H h)
Optimized convenience for call([a, b, c, d, e, f, g, h]).
- callOn
-
virtual R callOn(Obj target, Obj[] args)
Convenience for dynamically invoking an instance method with specified target and arguments. If this method maps to an instance method, then it is semantically equivalent to
call([target, args[0], args[1] ...])
. Throw UnsupportedErr if called on a function which is not an instance method. - curry
-
Perform a functional curry by binding the specified arguments to this function's parameters. Return a new function which takes the remaining unbound parameters. The
&
operator is used as a shortcut for currying. -
new make()
Private constructor.
- method
-
Method method()
Return the associated method if this function implements a method slot. If this function a is curried method using the "&" operator method call syntax, it will return the associated method. Otherwise return
null
.Examples:
f := Int#plus.func f.method => sys::Int.plus (&10.plus).method => sys::Int.plus (&f(10)).method => null
- params
-
Param[] params()
Get the formal parameters of the function.
- returns
-
Type returns()
Type returned by the function or sys::Void if no return value.