with: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Created article, no idea how it works though)
 
mNo edit summary
 
(69 intermediate revisions by 16 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


| Description. (control structure?)|= Description
|game3= tkoh
____________________________________________________________________________________________
|version3= 1.00


| Syntax |= Syntax
|game4= arma3
|version4= 0.50


|p1= parameter1 |= Parameter 1
|gr1= Program Flow
| returnValue |= Return value
|gr2= Namespaces
____________________________________________________________________________________________


|x1= example |=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]].}}


| |= 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|IF]]
[[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.