Assignment is done with the equals (=
) character.
# Assigns to a local variable local = 1 # Assigns to an instance variable @instance = 2 # Assigns to a class variable @@class = 3
Each of the above kinds of variables will be explained later on.
Some syntax sugar that contains the =
character is available:
local += 1 # same as: local = local + 1 # The above is valid with these operators: # +, -, *, /, %, |, &, ^, **, <<, >> local ||= 1 # same as: local || (local = 1) local &&= 1 # same as: local && (local = 1)
A method invocation that ends with =
has syntax sugar:
# A setter person.name=("John") # The above can be written as: person.name = "John" # An indexed assignment objects.[]=(2, 3) # The above can be written as: objects[2] = 3 # Not assignment-related, but also syntax sugar: objects.[](2, 3) # The above can be written as: objects[2, 3]
The =
operator syntax sugar is also available to setters and indexers. Note that ||
and &&
use the []?
method to check for key presence.
person.age += 1 # same as: person.age = person.age + 1 person.name ||= "John" # same as: person.name || (person.name = "John") person.name &&= "John" # same as: person.name && (person.name = "John") objects[1] += 2 # same as: objects[1] = objects[1] + 2 objects[1] ||= 2 # same as: objects[1]? || (objects[1] = 2) objects[1] &&= 2 # same as: objects[1]? && (objects[1] = 2)
To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/docs/syntax_and_semantics/assignment.html