with: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (added do{})
mNo edit summary
 
(64 intermediate revisions by 12 users not shown)
Line 1: Line 1:
{{Command|= Comments
{{RV|type=command
____________________________________________________________________________________________


| arma2 |= Game name
|game1= arma2
|version1= 1.00


|1.00|= Game version
|game2= arma2oa
____________________________________________________________________________________________
|version2= 1.50


| Execute the code inside the given namespace. |= Description
|game3= tkoh
____________________________________________________________________________________________
|version3= 1.00


| '''with''' NameSpace do {...};|= Syntax
|game4= arma3
|version4= 0.50


|p1= Namespace: [[Namespace]] |= Parameter 1
|gr1= Program Flow
| [[Anything]] |= Return value
|gr2= Namespaces
____________________________________________________________________________________________


|x1= <pre>with missionNamespace do {global = global + 1;};</pre> |=Example 1
|descr= Creates a [[With Type]] that is used inside a [[do]] construct in order to execute code inside a given namespace.
____________________________________________________________________________________________
{{Feature|important|To avoid the below-mentioned issue error (whether in [[Scheduler#Scheduled Environment|scheduled]] or [[Scheduler#Unscheduled Environment|unscheduled]] environment) use [[setVariable]]/[[getVariable]] with the desired [[Namespace]].}}


| [[ArmA:_Editing#Forward_Compatibility|Forward Compatibility]], [[missionNamespace]], [[uiNamespace]], [[parsingNamespace]] |= See also
|pr= When used in a do-construct in scripts with allowed suspension, a namespace switching might unexpectedly occur inside some scopes ([[for]], [[if]], [[try]], [[call]]) started in a [[Scheduler#Scheduled Environment|scheduled]] environment after small suspension if [[with]] was not the main scope; however, the issue does not arise if [[with]] is used in the parent scope:
{{{!}} class="wikitable"
! namespace switch risk
! namespace switch safe
{{!}}-
{{!}}
<sqf>] spawn
{
with uiNamespace do
{
for "_i" from 1 to 1 do
{
systemChat str [
currentNamespace isEqualTo uiNamespace,  
currentNamespace isEqualTo missionNamespace
];
// result [true, false]
sleep 0.05; // <-- small suspension
systemChat str [
currentNamespace isEqualTo uiNamespace,
currentNamespace isEqualTo missionNamespace
];
// result [false, true] <-- switching
};
};
};
</sqf>
{{!}}
<sqf>
with uiNamespace do
{
[] spawn
{
for "_i" from 1 to 1 do
{
systemChat str [
currentNamespace isEqualTo uiNamespace,  
currentNamespace isEqualTo missionNamespace
];
// result [true, false]
sleep 0.05; // <-- small suspension
systemChat str [
currentNamespace isEqualTo uiNamespace,
currentNamespace isEqualTo missionNamespace
];
// result [true, false] <-- NO switching
};
};
};
</sqf>
{{!}}}


|s1= [[with]] namespace
|p1= namespace: [[Namespace]]
|r1= [[With Type]]
|x1= <sqf>_myWithType = with uiNamespace;</sqf>
|x2= <sqf>with missionNamespace do { global = global + 1 };</sqf>
|seealso= [[missionNamespace]] [[uiNamespace]] [[parsingNamespace]] [[currentNamespace]]
}}
}}


<h3 style="display:none">Notes</h3>
{{Note
<dl class="command_description">
|user= Hypoxic125
<!-- Note Section BEGIN -->
|timestamp= 20230223070505
<!-- Note Section END -->
|text= '''Using with:'''
</dl>
<sqf>
with profileNamespace do {
myVariable = "Hello!";
};
</sqf>
'''is the same as:'''
<sqf>
profileNamespace setVariable ["myVariable", "Hello!"];
</sqf>


<h3 style="display:none">Bottom Section</h3>
This allows you to quickly modify/use variables within a namespace without using '''get/setvariable''' every time.
 
}}
[[Category:Scripting Commands|WITH]]
[[Category:Command Group: Program Flow|IF]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]

Latest revision as of 09:05, 23 February 2023

Hover & click on the images for description

Description

Description:
Creates a With Type that is used inside a do construct in order to execute code inside a given namespace.
To avoid the below-mentioned issue error (whether in scheduled or unscheduled environment) use setVariable/getVariable with the desired Namespace.
Problems:
When used in a do-construct in scripts with allowed suspension, a namespace switching might unexpectedly occur inside some scopes (for, if, try, call) started in a scheduled environment after small suspension if with was not the main scope; however, the issue does not arise if with is used in the parent scope:
namespace switch risk namespace switch safe

] spawn { with uiNamespace do { for "_i" from 1 to 1 do { systemChat str [ currentNamespace isEqualTo uiNamespace, currentNamespace isEqualTo missionNamespace ]; // result [true, false] sleep 0.05; // <-- small suspension systemChat str [ currentNamespace isEqualTo uiNamespace, currentNamespace isEqualTo missionNamespace ]; // result [false, true] <-- switching }; }; };

with uiNamespace do { [] spawn { for "_i" from 1 to 1 do { systemChat str [ currentNamespace isEqualTo uiNamespace, currentNamespace isEqualTo missionNamespace ]; // result [true, false] sleep 0.05; // <-- small suspension systemChat str [ currentNamespace isEqualTo uiNamespace, currentNamespace isEqualTo missionNamespace ]; // result [true, false] <-- NO switching }; }; };

Groups:
Program FlowNamespaces

Syntax

Syntax:
with namespace
Parameters:
namespace: Namespace
Return Value:
With Type

Examples

Example 1:
_myWithType = with uiNamespace;
Example 2:
with missionNamespace do { global = global + 1 };

Additional Information

See also:
missionNamespace uiNamespace parsingNamespace currentNamespace

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
Hypoxic125 - c
Posted on Feb 23, 2023 - 07:05 (UTC)
Using with:
with profileNamespace do { myVariable = "Hello!"; };
is the same as:
profileNamespace setVariable ["myVariable", "Hello!"];
This allows you to quickly modify/use variables within a namespace without using get/setvariable every time.