call: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
Line 28: | Line 28: | ||
|s1= [[call]] code | |s1= [[call]] code | ||
|p1= code: [[Code]] - [[compile|Compiled]] instructions. In {{ofp}} this command also accepts datatype [[String | |p1= code: [[Code]] - [[compile|Compiled]] instructions. In {{ofp}} this command also accepts datatype [[String]] | ||
|r1= [[Anything]] - The last value given in the function is returned. See the topic [[Function#Return_Values|Function]] for more information. | |r1= [[Anything]] - The last value given in the function is returned. See the topic [[Function#Return_Values|Function]] for more information. | ||
Line 36: | Line 36: | ||
|p21= args: [[Anything]] - Arguments that are passed to the function in the [[Magic Variables#this|_this]] variable | |p21= args: [[Anything]] - Arguments that are passed to the function in the [[Magic Variables#this|_this]] variable | ||
|p22= code: [[Code]] - [[compile|Compiled]] instructions. In {{ofp}} this command also accepts datatype [[String | |p22= code: [[Code]] - [[compile|Compiled]] instructions. In {{ofp}} this command also accepts datatype [[String]] | ||
|r2= [[Anything]] - The last value given in the function is returned. See the topic [[Function#Return_Values|Function]] for more information. | |r2= [[Anything]] - The last value given in the function is returned. See the topic [[Function#Return_Values|Function]] for more information. | ||
|x1= < | |x1= <sqf>call { hint str 123; };</sqf> | ||
|x2= < | |x2= <sqf>123 [[call]] { [[hint]] [[str]] _this; };</sqf> | ||
|x3= < | |x3= <sqf> | ||
_sum = [1, 2] call { (_this select 0) + (_this select 1); }; | |||
hint str _sum; // displays 3 | |||
</sqf> | |||
|x4= < | |x4= <sqf>123 call compile "hint str _this;";</sqf> | ||
|x5= < | |x5= <sqf>_result = 123 call compile preprocessFileLineNumbers "myFile.sqf";</sqf> | ||
|seealso= [[spawn]] [[execVM]] [[canSuspend]] [[compile]] [[compileScript]] [[preprocessFile]] [[remoteExec]] [[remoteExecCall]] | |seealso= [[spawn]] [[execVM]] [[canSuspend]] [[compile]] [[compileScript]] [[preprocessFile]] [[remoteExec]] [[remoteExecCall]] | ||
Line 67: | Line 69: | ||
{{!}}} | {{!}}} | ||
This means that doing something like this (which is misused very often): | This means that doing something like this (which is misused very often): | ||
< | <sqf> | ||
private _handle = _params spawn MY_fnc_Function; | |||
waitUntil { scriptDone _handle }; | |||
</sqf> | |||
is not needed, because a lot of performance would be wasted compared to simply doing this: | is not needed, because a lot of performance would be wasted compared to simply doing this: | ||
< | <sqf>_params call MY_fnc_Function;</sqf> | ||
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.<br> | 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.<br> | ||
If it is necessary to execute a code in the [[Scheduler#Unscheduled_Environment|Unscheduled Environment]], one can use [[isNil]] instead: | If it is necessary to execute a code in the [[Scheduler#Unscheduled_Environment|Unscheduled Environment]], one can use [[isNil]] instead: | ||
< | <sqf>isNil {_params call MY_fnc_Function}; // MY_fnc_Function is always executed unscheduled, regardless of the current environment</sqf> | ||
or if there are no parameters, one can simply do this: | or if there are no parameters, one can simply do this: | ||
< | <sqf>isNil MY_fnc_Function</sqf> | ||
}} | }} |
Revision as of 22:40, 18 April 2022
Description
- 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 excuted and behaves.
- Groups:
- Program Flow
Syntax
- Syntax:
- call code
- Parameters:
- code: Code - Compiled instructions. In Operation Flashpoint this command also accepts datatype String
- Return Value:
- Anything - The last value given in the function is returned. See the topic Function for more information.
Alternative Syntax
- Syntax:
- args call code
- Parameters:
- args: Anything - Arguments that are passed to the function in the _this variable
- code: Code - Compiled instructions. In Operation Flashpoint this command also accepts datatype String
- Return Value:
- Anything - The last value given in the function is returned. See the topic Function for more information.
Examples
- Example 1:
- Example 2:
- Example 3:
- Example 4:
- Example 5:
Additional Information
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
- Posted on Nov 05, 2021 - 10:52 (UTC)
-
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 doesn't 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):
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}; // MY_fnc_Function is always executed unscheduled, regardless of the current environmentor if there are no parameters, one can simply do this:
isNil MY_fnc_Function
Categories:
- Scripting Commands
- Introduced with Operation Flashpoint version 1.85
- Operation Flashpoint: New Scripting Commands
- Operation Flashpoint: Scripting Commands
- Operation Flashpoint: Elite: Scripting Commands
- ArmA: Armed Assault: Scripting Commands
- Arma 2: Scripting Commands
- Arma 2: Operation Arrowhead: Scripting Commands
- Take On Helicopters: Scripting Commands
- Arma 3: Scripting Commands
- Command Group: Program Flow