compileFinal
Description
- Description:
 - Compiles an expression / takes an existing HashMap and makes it final, preventing it from being modified or overwritten (by = assignation, publicVariable, set or any other command).
 - Groups:
 - Strings
 
Syntax
- Syntax:
 - compileFinal expression
 - Parameters:
 - expression: String, 
 2.14 Code or HashMap - Return Value:
 - Code or HashMap
 
Examples
- Example 1:
 - Example 2:
 - Example 3:
 - // since Arma 3 v2.14 private _readonlyCode = compileFinal { systemChat "Hello World!"; }; 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 
- 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.
 
- 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.
 
- 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!
 
- Posted on Jun 22, 2024 - 23:41 (UTC)
 - 
Making a base class read only using HashMapObjects
Class_Dog = compileFinal createHashMapObject [ // Properties ["#type", "Dog"], ["owner", objNull], ["legs", 4], ["health", 100], ["vehicleclass", "Dog_Base_F"], ["vehicle", objNull], // Constructor ["#create", { params [["_owner", objNull], ["_vehicle", objNull]]; if ([_owner, _vehicle] findIf {isNull _x} != -1) exitWith {}; _self set ["owner", _owner]; _self set ["vehicle", _vehicle] }] ]; NewDog = createHashMapObject [ [["#base", Class_Dog]], [player_1, createVehicle [Class_Dog get "vehicleclass", [0,0,0], 0, [], "NONE"]] ]; NewDog set ["owner", player_2]; NewDog get "owner"; // returns player_2 Class_Dog set ["owner", player_1]; // Error: Read Only