Description
Adds given set of compiled instructions to the current stack and waits for it to finish and return, provides an option to pass arguments to the executed Code.
See Scheduler to learn more about how the code is executed and behaves.
Syntax
Syntax 1
call code
Parameters:
Returns: Anything - the last value given in the function is returned - see the topic Function for more information
Syntax 2
args call code
Parameters:
Returns: Anything - the last value given in the function is returned. See the topic Function for more information.
Syntax 3
since arma3 2.14
hashMapObj call [methodName, arguments]
Parameters:
hashMapObj: HashMap - the HashMap (not necessarily created through createHashMapObject) to call the method on
methodName: String - the name of the method to call (the method must be defined in hashMapObj; see createHashMapObject)
arguments: Anything - (Optional, default parent scope's _this) arguments passed to the method in the _this variable
Returns: Anything - the value returned by the methodName method
Examples
Example 1
call { hint str 123; };
Example 2
123 call { hint str _this; };
Example 3
_sum = [1, 2] call { (_this select 0) + (_this select 1); };
hint str _sum;
Example 4
123 call compile "hint str _this;";
Example 5
_result = 123 call compile preprocessFileLineNumbers "myFile.sqf";
Example 6
private _hashMapObj = createHashMapObject [[
["MyMethod", { systemChat ("MyMethod arguments: " + str _this); }]
]];
_hashMapObj call ["MyMethod", ["Hello there", player, 123]];
See also
spawn · execVM · canSuspend · compile · compileScript · preprocessFile · remoteExec · remoteExecCall
Contrary to a widespread misconception in the community, call doesn't necessarily execute the code in the Unscheduled Environment. Call simply means: "execute the code here", just like how you execute a code using then (if (true) then _code) or do. Therefore it does not change the environment:
| call executed in environment: |
Resulting environment of the code: |
| Scheduled |
Scheduled |
| Unscheduled |
Unscheduled |
This means that doing something like this (which is misused very often):
private _handle = _params spawn MY_fnc_Function;
waitUntil { scriptDone _handle };
is not needed, because a lot of performance would be wasted compared to simply doing this:
_params call MY_fnc_Function;
which does the exact same thing as the previous code, except no new "scheduler thread" is created and the function executes seamlessly, plus the added performance benefit as mentioned before.
If it is necessary to execute a code in the Unscheduled Environment, one can use isNil instead:
isNil {_params call MY_fnc_Function};
or if there are no parameters, one can simply do this:
isNil MY_fnc_Function