# Precedence¶ ↑

From highest to lowest, this is the precedence table for ruby. High precedence operations happen before low precedence operations.

    !, ~, unary +

    **

    unary -

    *, /, %

    +, -

    <<, >>

    &

    |, ^

    >, >=, <, <=

    <=>, ==, ===, !=, =~, !~

    &&

    ||

    .., ...

    ?, :

    modifier-rescue

    =, +=, -=, etc.

    defined?

    not

    or, and

    modifier-if, modifier-unless, modifier-while, modifier-until

    { } blocks

Unary `+` and unary `-` are for `+1`, `-1` or `-(a + b)`.

Modifier-if, modifier-unless, etc. are for the modifier versions of those keywords. For example, this is a modifier-unless statement:

    a += 1 unless a.zero?

Note that `(a if b rescue c)` is parsed as `((a if b) rescue c)` due to reasons not related to precedence. See modifier statements.

`{ ... }` blocks have priority below all listed operations, but `do ... end` blocks have lower priority.

All other words in the precedence table above are keywords.