Table of Contents | Sections |
RCL supports a variety of operators for manipulating values and resource collections. There are arithmetic operators for calculations (+, -, *, /, ^, %), collections and array management operators for retrieving and adding elements as well as checking inclusion ([ ], <<, <, >), the usual equality and boolean operators (==, !=, <, >, <=, >=, &, |, !) as well as the regexp operator for match strings with regular expressions (=~, !~).
The following table lists the precedence of RCL operators. Operators are listed top to bottom, in descending precedence.
Precedence | Operators | Notes |
0 | [] | slice operator (retrieve item(s) of array, hash or collection given an index, key or range) |
1 | ^ | exponent |
2 | !, +, - | logical not, unary plus, unary minus |
3 | *, /, % | multiplication, division, modulo |
4 | +, - | addition or string, array or collection concatenation - subtraction or array collection difference |
5 | << | array append |
6 | ==, !=, =~, !~, >=, <=, >, < | relational and equality operators |
7 | & | bitwise AND |
8 | | | bitwise OR |
9 | && | bitwise AND |
10 | || | logical OR |
The following sections list all the operators and their semantic depending on the types of the operands. The left column represent the left hand side operand type while the top row represents the right hand side operand type. The values describe the semantic of the operation or list error if the corresponding operator cannot be applied with the given operand types.
+ | number | string | array | hash | res collection | other |
number | addition | error | error | error | error | error |
string | concatenation | concatenation | error | error | error | error |
date/time | addition (seconds) | error | error | error | error | error |
array | error | error | concatenation | error | error | error |
hash | error | error | error | merge left into right | error | error |
res collection | error | error | error | error | concatenation | error |
other | error | error | error | error | error | error |
- | number | date/time | array | res collection | other |
number | subtraction | error | error | error | error |
date/time | subtraction (seconds) | subtraction (seconds) | error | error | error |
array | error | error | array difference | error | error |
res collection | error | error | error | coll difference | error |
other | error | error | error | error | error |
* | number | other |
number | multiplication | error |
other | error | error |
/ | number | other |
number | division (integral if both numbers are integers) | error |
other | error | error |
% | number | other |
number | modulo (non integer numbers are rounded) | error |
other | error | error |
^ | number | other |
number | power | error |
other | error | error |
<< | all |
array | Append object in right hand side to array in left hand side |
other | error |
The slice operator returns elements of an array, a hash or a resource collection using an index or a range (array and resource collection) or a key (hash). A range is specified using x..y where x and y are optional (no x means from the start of the array or collection, no y means to the end of the array or collection). Note that retrieving elements of a resource collection creates a new resource collection consisting of these elements.
[ ] | number | string | range | other |
res collection | Creates new collection consisting of the element at given index. | error | Creates a new collection consisting of the element in the given range (x..y where x and y are optional) | error |
array | value at given index | error | Creates a new array consisting of the element in the given range (x..y where x and y are optional) | error |
hash | error | value associated with given key if any, 'null' otherwise | error | error |
string | Create string composed of character at given index. | error | Create string made of characters in the given range. Range bounds may have negative values (from last or from beginning). | error |
other | error | error | error | error |
The slice assign operator replaces an element of an array, hash or resource collection or a range of an array or resource collection with given elements.
[ ]= | number | string | range | other |
res collection | Replaces resource at given index. Right hand side must be a resource collection. | error | Replace elements in the given range with elements of right hand side resource collection. | error |
array | Replace value at given index | error | Replace elements in the given range with elements of the given array. Right hand side must be an array. | error |
hash | error | Replace/set value associated with given key | error | error |
other | error | error | error | error |
Regular expression/Include Operators
=~ | string | array | other |
string | 'true' if regular expression given in right operand matches string given in left operand | error | error |
array | 'true' if array contains string | 'true' if array contains array | 'true' if array contains value |
hash | 'true' if hash has that key | error | error |
other | error | error | error |
The right hand side of a regular expression comparison may use the symbol / to delineate the pattern. The ending/ may be followed by the following options:
examples:
"foo" =~ "foo" # true "foo" =~ /foo/ # true "foo" =~ /FOO/i #true
a !~ b is equivalent to !(a =~ b)
Equality comparison is done recursively if values are arrays or hashes.
== | all |
all | 'true' if operands have same value, 'false' otherwise |
< | number | string | date/time | res collection | array | other |
number | less than | error | error | error | error | error |
string | error | lexicographical less than | error | error | error | error |
date/time | error | error | less than | error | error | error |
res collection | error | error | error | @a < @b: true if all elts of @a are also elts of @b | error | error |
array | error | error | error | error | $a < $b: true if all elts of $a are also elts of $b | error |
other | error | error | error | error | error | error |
Note: >, <=, and >= are omitted for brevity (greater than, lesser or equal than, greater or equal than, respectively).
'Bitwise and'. Applied to resource collections (or arrays) it returns all elements that appear in both resource collections (or arrays).
& | 'false' | 'null' | 'true' | array | res collection | other |
'false' | 'false' | 'false' | 'false' | 'false' | 'false' | 'false' |
'null' | 'false' | 'false' | 'false' | 'false' | 'false' | 'false' |
'true' | 'false' | 'false' | 'true' | 'true' | 'true' | 'true' |
array | error | error | error | intersection of the two arrays | error | error |
res collection | error | error | error | error | new collection with common hrefs -or- error if collections are of different types | error |
other | error | error | error | error | error | error |
'Logical and'. Returns the right hand side operand if the left hand side is neither 'false' nor 'null' (otherwise returns left hand side operand).
&& | 'false' | 'null' | 'true' | other (1) |
'false' | 'false' | 'false' | 'false' | 'false' |
'null' | 'null' | 'null' | 'null' | 'null' |
'true' | 'false' | 'null' | 'true' | (1) |
other (2) | 'false' | 'null' | 'true' | (2) |
'Bitwise or'. Applied to resource collections (or arrays), returns all elements that appear in either resource collection (or array).
Note: This operator differs from the + operator when applied to collection in that it will produce only one instance of each element in each collection even if the same element appears in both.
| | 'false' | 'null' | 'true' | other |
'false' | 'false' | 'false' | 'true' | 'true' |
'null' | 'false' | 'false' | 'true' | 'true' |
'true' | 'true' | 'true' | 'true' | 'true' |
other | error | error | error | error |
'Logical or'. Returns the left hand side operand if it is neither 'false' nor 'null' (otherwise returns right hand side operand).
|| | 'false' | 'null' | 'true' | other (2) |
'false' | 'false' | 'null' | 'true' | (2) |
'null' | 'false' | 'null' | 'true' | (2) |
'true' | 'true' | 'true' | 'true' | 'true' |
other (1) | (1) | (1) | (1) | (1) |
- is the unary minus operator:
- | |
number | opposite value |
other | error |
! is the logical not operator. Note that it applies to all types (negating a non boolean value returns 'true' if it is either 'false' or 'null', 'false' otherwise):
! | |
'false' | 'true' |
'null' | 'true' |
other | 'false' |
END
RCL | Resources | Cloud Workflows & Definitions | Variables | Attributes & Error Handling | Branching & Looping | Processes | Functions | ► Operators | Mapping |
© 2006-2014 RightScale, Inc. All rights reserved.
RightScale is a registered trademark of RightScale, Inc. All other products and services may be trademarks or servicemarks of their respective owners.