Operator Expressions
Most operators are actually method calls. For example, a +
b
is interpreted as a.+(b)
, where the
+
method in the object referred to by variable
a
is called with b
as its
argument.
For each operator (+
-
*
/
%
**
&
|
^
<<
>>
&&
||
), there is a corresponding form of abbreviated
assignment operator (+=
-=
etc.)
Here are the operators shown in order of precedence (highest to
lowest):
:: |
[] |
** |
+(unary) -(unary) ! ~ |
* / % |
+ - |
<< >> |
& |
| ^ |
> >= < <= |
<=> == === != =~ !~ |
&& |
|| |
.. ... |
?: |
= (and abbreviated assignment operators such as +=, -=, etc.) |
not |
and or |
Nonmethod operators
The following operators aren’t methods and, therefore, can’t be redefined:
... |
! |
not |
&& |
and |
|| |
or |
:: |
= |
+= , -= , (and other abbreviated assignment operators) |
? : (ternary operator) |
Range operators
Range operators function differently
depending on whether or not they appear in conditionals,
if
expressions, and while
loops.
In
conditionals, they return true
from the point
right operand is true
until left operand is
true:
expr1
..
expr2
Evaluates
expr2
immediately afterexpr1
turnstrue
.expr1
...
expr2
Evaluates
expr2
on the iteration afterexpr1
turnstrue
.
In other contexts, they create a range object:
expr1
..
expr2
Includes both expressions (
expr1
<=
x
<=
expr2
)expr1
...
expr2
Doesn’t include the last expression (
expr1
<=
x
<
expr2
)
Logical operators
If the value of the entire expression can be determined with the value of the left operand alone, the right operand isn’t evaluated.
&& and
Returns
true
if both operands aretrue ...
Get Ruby in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.