Skip to content

Push

Name Mandatory Description Default Type
⬅️ Input The value to push into the sequence. Any
Output ➡️ The input to this shard is passed through as its output. Any
Name No The name of the variable. `` StringVar(Any)
Key No The key of the value to write in the table (parameter applicable only if the target variable is a table). none Any
Global No If the variable is available to all of the wires in the same mesh. false Bool
Clear No Whether to clear this sequence at every wire iteration. This only works if it's the first push. The default is true. true Bool

Pushes a new value into a sequence variable. If the variable does not exist, it will be created.

Details

Push updates sequences and tables by pushing elements and/or sequences into them.

The name of the variable to update should come from the Name parameter and the new update value(s) should come from the shard's input.

For existing sequences Push pushes in the new elements. If a sequence doesn't exist then Push will create it while pushing in the first element. These elements may be string constants, numerics, or even sequences themselves.

For tables Push can update only those existing keys whose values are of the type sequence. In such cases Push can push in new elements in those key-value pair sequences. The key to be updated must be passed in via the Key parameter.

[!NOTE] 1. Do not use Push to update any variables created by Set (or its aliases >=). Push is best used to update variables that were themselves created by Push (first push). 2. Though, if you really want to do (1.) you can offload the current sequence into another sequence variable, push new values into it, and update the table with this sequence variable (see the last code example).

The Global parameter controls whether the created variables can be referenced across wires (Global set to true) or only within the current wire (Global set to false, default behavior).

Variables may be locally scoped (created with Global: false; exists only for current wire) or globally scoped (created with Global: true; exists for all wires of that mesh). Hence, in update mode (i.e. when you apply Push to an existing variable) the Global parameter is used in conjunction with the Name parameter to identify the correct variable to update.

The parameter Clear controls whether we should clear out this sequence after every wire iteration (Clear set to true, default behavior) or should the sequence data persist across wire iterations (Clear set to false).

The input to this shard is the new update value that is to be pushed into the sequence/table being modified. This value is also passed through as this shard's output.

[!NOTE] Push has one alias: >> which is equal to Push(... Clear: true).

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
; ; create and update sequence with `| Push`; value available only to current wire
1 | Push(Name: seq1) ; ; create a sequence by | Pushing the first element
seq1 | Log("seq1") ; ; sequence created => [1]
2 | Push(Name: seq1) ; ; | Push one more element into sequence
seq1 | Log("seq1") ; ; sequence updated => [1, 2]

; ; Update an existing sequence  with `| Push`; value available to all wires on mesh
[10 20] | Set(Name: seq2 Global: true) ; ; create sequence with two elements
seq2 | Log("seq2") ; ; sequence created => [10, 20]
30 | Push(Name: seq2 Global: true) ; ; | Push one more element into sequence
seq2 | Log("seq2") ; ; sequence updated => [10, 20, 30]

; ; create empty sequence with `Sequence`; add elements with `| Push`
Sequence(Name: seq3) ; ; create empty sequence
seq3 | Log("seq3") ; ; empty sequence created => []
1 | Push(Name: seq3 Clear: false) ; ; | Push an element into sequence
seq3 | Log("seq3") ; ; sequence updated => [1]               
2 | Push(Name: seq3 Clear: false) ; ; | Push another element into sequence
seq3 | Log("seq3") ; ; sequence updated => [1, 2]    

; ; create empty table with `Table`; add/update key sequence values with `| Push`
Table(Name: table1) ; ; created an empty table (one key, no value)
table1 | Log ; ; table with one key (no value) created => {A: []}
1 | Push(table1 "A") ; ; | Push new key "A" with sequence value "[1]"
table1 | Log ; ; table key/value updated => {A: [1]}
2 | Push(table1 "A") ; ; | Push new element into key "A" existing sequence
table1 | Log ; ; table key/value updated => {A: [1, 2]}

; ; Using a `| Push` alias: `>>` is alias for `| Push(Clear: true)` 
"Hello" >> seq4 ; ; create sequence by | Pushing the first element
seq4 | Log("seq4") ; ; sequence created => [Hello]
"World" >> seq4 ; ; update the sequence by | Pushing one more element
seq4 | Log("seq4") ; ; sequence updated with second element => [Hello, World]

; ; Technique to update a non-| Push created Table's sequence values with `| Push`
{k1: [1 2 3]} >= table2 ; ; table is created using `Set`
table2 | Log ; ; table with key/value pair created => {k1: [1 2 3]}
Get(table2 "k1") >= seqvar ; ; target value offloaded into a sequence variable
4 | Push(seqvar) ; ; update sequence variable using `| Push`
seqvar | Log ; ; sequence variable updated => [1, 2, 3, 4] 
{k1: seqvar} >= table2 ; ; update table key sequence value with modified sequence variable                      
table2 | Log