код
def c=(foo) p "hello" return foo + 1 end p self.c = 3 d = (self.c = 3) p d
и он будет печатать только 3 ... другими словами, возвращаемое значение 4 не присваивается d, почему?
d
Сеттеры возвращают свой аргумент (или правильный операнд, в зависимости от того, как вы на него смотрите) - всегда.
Методы типа def foo=(bar) не могут вернуть значение. Возможно, разрешено множественное назначение:
def foo=(bar)
a = self.foo = 3 # a will be 3, independent of what foo returns