Если вы попробуете в irb это выражение:
a = "something" #=> "something"
Как видите, операция присваивания возвращает результат, потому что в ruby каждое выражение должно что-то возвращать. Итак, это выражение:
@b = b #=> b
вернет значение @b
. Тогда в этом выражении
@a = a, @b = b, @c = c
, где @b = b
и @c = c
будут оцениваться до b
и c
Итак, наконец, у нас будет это выражение:
@a = a, b, c
И, как вы знаете, это еще одна форма для инициализации массива
@a = [a, b, c]
Этот код будет работать так же, как ваш:
class Test
def initialize a, b, c
@a = a, b, c
@b = b
@c = c
end
end
Дополнение:
Порядок оценки является значительным.
Если вы попробуете это выражение:
@a = a, (@b = b, @c = c)
Во-первых, он будет оценивать все в скобках:
@b = b, @c = c #=> @b = [b,c] and @c = c
Итак, мы получим это
@a = [a,[b,c]]
@b = [b,c]
@c = c