A port is a typed connection point on a functor. Input ports receive data; output ports produce it. Every functor defines a fixed set of ports — their names, types, and whether they are required or optional — and data flows between functors by connecting an output port of one to an input port of another.
Every input port is either required or optional:
Some optional ports are also nullable — they explicitly accept the absence of a value as meaningful input. A nullable port whose default is already none can be left without a value intentionally by supplying the constant .none. This is distinct from simply omitting the port (which uses the default) because it explicitly signals that no value is being provided.
An editable port can receive a constant value typed directly into the GUI or written as a constant in an EGO Script call. Non-editable ports must be connected to an output from another functor; they cannot be supplied with a constant.
Some ports are auto-bound — when the functor is placed inside a compatible container, the port automatically connects to the relevant internal port of that container without needing an explicit connection. Auto-binding applies to both input and output ports.
Auto-bound input ports connect automatically to an internal output of the enclosing container:
step — on Step, all Load* and Save* file I/O functors, and all Select* functors. Auto-binds to the step internal output of the enclosing loop container (Repeat, For, For Each, For Each Category, For Each Region, While, Do While).workdir — on all Load* and Save* file I/O functors. Auto-binds to the workdir internal output of the enclosing Workdir container.regionManager — on Get All Regions Info, Get Region Info, Region, Region Manager Value, Regional Map, Regional Categorical Map, Regionalize Map, Regionalize Categorical Map, Merge Regional Maps, Merge Regional Categorical Maps. Auto-binds to the regionManager internal output of the enclosing Region Manager, Region, or For Each Region container.regionId — on Get Region Info, Region, Regional Map, Regional Categorical Map, Regionalize Map, Regionalize Categorical Map. Auto-binds to the regionId internal output of the enclosing Region container.tableManager — on Merge Sub Tables, Sub Table, Table Manager Value. Auto-binds to the tableManager internal output of the enclosing Table Manager container.currentIndividual — on Get Current Individual. Auto-binds to the currentIndividual internal output of the enclosing Genetic Algorithm Tool container.Auto-bound output ports connect automatically to an internal input of the enclosing container:
condition — on Set While Condition. Auto-binds to the condition internal input of the enclosing While or Do While container.fitness — on Set Fitness. Auto-binds to the fitness internal input of the enclosing Genetic Algorithm Tool container.
A functor may produce one or more outputs. In EGO Script, outputs are bound to variables using the := operator (see Functor calls). When a functor produces multiple outputs and only some are needed, the underscore _ discards unwanted ones:
// Bind all outputs
{ areaTable = areas } := CalcAreas { source = landscape };
// Bind only the first output; discard the rest
result := SomeFunctor input1 input2;
// Discard first output; keep second
_ secondOutput := SomeFunctor input1 input2;
Port names follow different conventions depending on context:
cellType, resultIsSparse, nullValue. See Nominal syntax for how port names appear in functor calls.The conversion between the two follows the same rules as alias and variable name conversion in EGO Script.
Every port has a type that determines what data it can carry. A port accepts data of its exact type or any type that can be automatically converted to it. See the type system documentation for the full list of types and their conversions.
Two special constants are available for any input port regardless of type (see Constants):
.UNBOUND — the port is not connected, or its connection is deliberately being ignored. Used especially when copying a fragment of a model to a text editor, where some connections may not be part of the selection..none — the port is intentionally left without a value. Valid only for optional nullable input ports.Most container functors expose two special sequencing ports:
sequenceInput — connecting a value here ensures the functor that produced that value completes before this container starts. Accepts any data type.sequenceOutput — pass this to another functor's sequenceInput to force this container to complete first.These ports carry no data; their only purpose is to impose execution ordering. See Sequence ports in the EGO Script documentation for details and examples.
Container functors communicate with the functors inside them through internal ports:
{ variable = portName } form.condition port of a loop).| Container | Internal output port | Type | Description |
|---|---|---|---|
| Do While | step | NonNegativeIntegerValue | Current iteration index, starting at 0. |
| For | step | RealValue | Current value in the numeric range being iterated. |
| For Each | step | RealValue | Current row value from the table being iterated. |
| For Each Category | step | IntegerValue | Current category code from the categorical map. |
| For Each Region | step | IntegerValue | Current region identifier. |
| For Each Region | regionManager | RegionManager | The region manager for the current region. |
| Repeat | step | NonNegativeIntegerValue | Current iteration index, starting at 0. |
| While | step | NonNegativeIntegerValue | Current iteration index, starting at 0. |
| Region Manager | regionManager | RegionManager | The region manager for the current region context. |
| Region | regionManager | RegionManager | The region manager. |
| Region | regionId | IntegerValue | The current region identifier. |
| Workdir | workdir | Workdir | The working directory defined by the container. |
| Table Manager | tableManager | TableManager | The table manager defined by the container. |
| Genetic Algorithm Tool | currentIndividual | LookupTableGroup | The current individual in the genetic algorithm population. |
| Container | Internal input port | Type | Set by |
|---|---|---|---|
| While | condition | BooleanValue | Set While Condition — the condition output port is auto-bound to this internal input. |
| Do While | condition | BooleanValue | Set While Condition — the condition output port is auto-bound to this internal input. |
| Genetic Algorithm Tool | fitness | RealValue | Set Fitness — the fitness output port is auto-bound to this internal input. |
See Internal output ports and Internal input ports for EGO Script syntax details and examples.
The five calculator functors (Calculate Map, Calculate Categorical Map, Calculate Value, Calculate Lookup Table Values, Calculate Lookup Table Keys And Values) connect their data inputs through hook functors rather than directly:
In the abbreviated (shorthand) syntax, hook ports are implicit — operands are referenced directly by variable name using a type sigil (# for maps, % for tables, $ for values). See Calculator functor shorthand for details.