Create a dynamic function that captures a prefix variable and prepends it to input.
← Advanced Type System · Ref: Q1125
Capture a variable into a dynamic function:
transform <- (prefix: prefixText) extends Transformer as function output: `${prefix} ${input}`
(prefix: prefixText) captures local 'prefixText' into a field named 'prefix'. The abstract function type defines parameter and return types.
See Q1126 for dynamic classes.
Example
defines module qa.advancedtypes.dynamicfunctioncapture defines function Transformer as abstract -> input as String <- output as String? defines program DynamicFunctionCaptureDemo() stdout <- Stdout() prefixText <- "Hey" //Create dynamic function capturing prefixText as 'prefix' transform <- (prefix: prefixText) extends Transformer as function output: `${prefix} ${input}` result <- transform("World") stdout.println(result)
Common mistakes
E01010 — EK9 dynamic functions extend an abstract function type. Use 'extends TypeName as function' with a capture list.
Incorrect:
transform <- (input) -> prefix + input
Correct:
transform <- (prefix: prefixText) extends Transformer as function
Other ways to ask this
- I need a closure that captures a local variable and uses it in its body
- In JavaScript I'd create a closure over a variable. Write the EK9 dynamic function
- Given a prefix string, create a dynamic function that adds it to any input
- Build a function that captures state with named capture syntax
Coming from another language?
JavaScript: const fn = (input) => prefix + input (closure). Java: lambda with effectively final variable. Python: lambda or closure. EK9: named capture in dynamic function.
Keywords: state, closure, dynamic, function, lambda, capture