compileFinal: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Fix parameter and result value)
(Fix description)
Line 6: Line 6:
|gr1= Strings
|gr1= Strings


|descr= Compiles an expression and makes it final, preventing it from:
|descr= Compiles an expression / takes an existing [[Array]]/[[HashMap]] and makes it final, preventing it from being modified or overwritten (by [[=]] assignation, [[publicVariable]], [[set]] or any other command).
* being modified by [[compile]] or [[compileFinal]]
* being removed with [[nil]]
* being modified by [[publicVariable]], [[publicVariableClient]] or [[publicVariableServer]]
{{Feature|informative|This feature is only available in the retail version of {{arma3}}.}}
{{Feature|informative|This feature is only available in the retail version of {{arma3}}.}}


Line 31: Line 28:


// an alternative is to copy str'd code (since Arma 3 v2.02)
// an alternative is to copy str'd code (since Arma 3 v2.02)
_myNonFinalCopy = compile toString _myCode;
private _myNonFinalCopy = compile toString _myCode;
</sqf>
</sqf>



Revision as of 17:40, 9 April 2023

Hover & click on the images for description

Description

Description:
Compiles an expression / takes an existing Array/HashMap and makes it final, preventing it from being modified or overwritten (by = assignation, publicVariable, set or any other command).
This feature is only available in the retail version of Arma 3.
Groups:
Strings

Syntax

Syntax:
compileFinal expression
Parameters:
expression: String, Arma 3 logo black.png2.14 Code, Array or HashMap
Return Value:
Code, Array or HashMap

Examples

Example 1:
_myCode = compileFinal "a = a + 1"; call _myCode; // repeated compile won't have any effect _myCode = compileFinal "a = a + 2";
Example 2:
// duplicate code will be final as well _myDuplicateCode = _myCode; // an alternative is to copy str'd code (since Arma 3 v2.02) private _myNonFinalCopy = compile toString _myCode;
Example 3:
// since Arma 3 v2.14 private _readonlyCode = compileFinal { systemChat "Hello World!"; }; private _readonlyArray = compileFinal [1, 2, 3]; private _readonlyHashMap = compileFinal _myHashMap;

Additional Information

See also:
compile compileScript isFinal call spawn

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
AgentRev01 - c
Posted on Aug 15, 2013 - 00:35 (UTC)
When broadcasting a compileFinal'ed variable using publicVariable or its variants, the variable also becomes final on the other client(s) and/or the server. Also, compileFinal does not prevent event handlers from being removed or overwritten.
IT07 - c
Posted on May 27, 2017 - 11:58 (UTC)
in Arma 3 v1.70.141838, compileFinal also works for profileNamespace and uiNamespace. But be careful with that.
Dscha - c
Posted on Oct 23, 2020 - 10:39 (UTC)
Change with Arma 3 patch 2.00, compileFinal is now unable to store code type variables in profileNamespace!