В Ruby, если мы определяем «c = (foo)» и он возвращает foo + 1, почему это не присваивается d = (self.c = 3)? - PullRequest
4 голосов
/ 25 февраля 2011

код

def c=(foo)
  p "hello"
  return foo + 1
end

p self.c = 3
d = (self.c = 3)
p d

и он будет печатать только 3 ... другими словами, возвращаемое значение 4 не присваивается d, почему?

Ответы [ 2 ]

7 голосов
/ 25 февраля 2011

Сеттеры возвращают свой аргумент (или правильный операнд, в зависимости от того, как вы на него смотрите) - всегда.

3 голосов
/ 25 февраля 2011

Методы типа def foo=(bar) не могут вернуть значение. Возможно, разрешено множественное назначение:

a = self.foo = 3
# a will be 3, independent of what foo returns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...