В качестве примера взят этот класс:
class House
def initialize(color, size)
@color = color
@size = size
end
def color
@color
end
# Is the = part of the syntax or a convention?
def color=(color)
@color = color
end
end
Является ли равенство '=' в конце метода установки соглашением, например '!' или '?'? Или это добавляет функциональность?
Это «всего лишь» соглашение, подобное тому, как завершающие методы возвращают логическое значение с помощью ?
или добавляют !
, когда существует менее опасный аналогичный метод.
Вы можете определить метод установки с помощью (стиля Java)
def set_color(color)
@color = color
end
или даже используя Unicode
def 🎨(color)
@color = color
end
и это не будет иметь никакого значения во время выполнения.
Кстати, в этом примере вы также можете использовать
attr_writer :color
См. attr_writer , attr_reader и attr_accessor.
... и в случае вызова метода, независимо от того, происходит ли присвоение на самом деле.
Одно незначительное отличие состоит в том, что выражения присваивания возвращают присвоенное значение независимо от возвращаемого значения метода присваивания, что позволяет выполнять цепочки присвоений.