Tinderbox 7 Icon

= (assignment)


Operator Type: 

Operator Scope of Action: 

Operator Purpose: 

Operator First Added: 

Operator Altered: 

 Operator   [other Operator type actions]

 Item   [operators of similar scope]

 Assignment   [other Assignment operators]

 Baseline

 


A single = symbol is used only as a method of assignment (for tests of equivalence, use a double equals sign e.g. == ):

$AttributeA = $AttributeB (attribute value

$AttributeA = data (literal data)

$AttributeA = 4 * ($Price / 2) (expression)

The assignment is always from right to left; the left-side attribute takes the value of the right side attribute/expression. It is more usual for the right side to be evaluated (an expression) than the left, though the latter can occur.

Thus assignment sets the value of the specified left-side attribute the given right-side evaluated result; most often this is simply an attribute value. Where the right-side value is an attribute name, the $-prefix must be used. Take a note that has a $Color value of "red" and the $Rule:

$MyUserColor = "Color" 

The result is not the text value red but rather it is a text value "Color". Most likely there is no defined named color named "Color" so some some other colour value - not the intended one - stored in $MyUserColor. If you want the value of an attribute, i.e. the $Color value of 'red' in this example, then your $Rule should be:

$MyUserColor = $Color 

You must use the $ prefix - see further detail below.

Actions and rules are allowed to specify a different referenced note, just as they can with a source attribute reference:

$AttribName(parent)="theValue" 

$AttribName(/path/to/note)="theValue"

$AttribName(/path/to/note)=$MyValue(parent) 

$AttribName($AnotherAttribute)="theValue" 

In the last case the secondary attribute will hold a note name or path. Complex use of left-side expressions is allowed.

Do not mix $Attribute and Attribute(pattern) syntax in a single call, i.e. $Attribute(pattern), as this will cause expected results. Use one syntax or the other. This possible conflict should only ever occur in the context of queries or operations that allow query-style code.

If a value only needs to be assigned once, consider using a logical OR join.

Using Paths (offset references)

$AttributeA = $AttributeB( note/item/path )

This sets the value of the $AttributeA to that of the $AttributeB of the same note (i.e. this or current), if no argument is specified, or of a note specified through name, item or path. (See more on paths). From v4.6, paths may also be used on the left side of the overall expression:

$AttributeA( note/item/path ) = $AttributeB

$AttributeA( note/item/path ) = $AttributeB( note/item/path )

Using query back-references

NOTE: the following syntax can only be used in the context of a query. In a query (an agent's query or an if() condition in an action) it is possible to combine a pattern query with an action that uses the value of the found pattern:

query: $Text.contains("email: <(.+)>")

action: $TheAddress=$1

…will set TheAddress attribute value to the pattern found in text. It is assumed that back-references $1-$9 may be used, assuming the pattern generates more than one such references.