a = b = c = d = 5
puts (a) >> 5
puts (b) >> 5
puts (b) >> 5
puts (b) >> 5
a= a+1
puts (a) >> 6
puts (b) >> 5
Я нашел, что нет никакой проблемы с присвоением значений как это. Мой вопрос, нужно присвоиться как один данный выше или как это?
a , b, c, d = 5, 5, 5, 5
Здесь нужно помнить, что ваш случай работает нормально только потому, что числа неизменяемы в Ruby. Вы не захотите делать это со строками, массивами, хэшами или чем-либо еще, кроме чисел, потому что это создаст несколько ссылок на один и тот же объект, что почти наверняка не то, чего вы хотите:
a = b = c = d = "test"
b << "x"
=> "testx"
a
=> "testx"
Тогда как параллельная форма безопасна со всеми типами:
a,b,c,d = "test","test","test","test"
=> ["test", "test", "test", "test"]
b << "x"
=> "testx"
a
=> "test"
Нет ничего плохого в таком присваивании (a = b = c = d = 5
). Лично я предпочитаю этот способ множественному присваиванию, если все переменные должны иметь одно и то же значение.
Вот другой способ:
a, b, c, d = [5] * 4
Эти две инициализации выражают разное значение. a = b = c = d = 5
означает, что «все мои переменные должны быть инициализированы одним и тем же значением, и это значение равно 5». Другой, a, b, c, d = 5, 5, 5, 5
, означает «У меня есть список переменных и соответствующий список начальных значений».
Ваша логика такова, что все переменные всегда должны быть одинаковыми? Тогда лучше первое. Если нет, может быть лучше второй. Другой вопрос: является ли ваш список из 4 переменных исчерпывающим? есть вероятность, что вы добавите или удалите другую переменную в эту группу? Если да, то я бы предложил другой вариант:
a = 5
b = 5
c = 5
d = 5
Я вообще не использую ruby, так что это может быть приемлемой идиомой, но a = b = c = d = 5
выглядит для меня довольно уродливо. a , b , c , d = 5, 5, 5, 5, 5
выглядит гораздо симпатичнее, IMO.
Если чувствуешь себя хорошо, сделай это.
Как вы обнаружили, язык это позволяет, и он ведет себя так, как вы ожидаете. Я бы предположил, что единственный вопрос, который вы должны задать себе, касается выразительности: говорит ли код вам, какова его цель?
Лично мне не особенно нравится использовать эту конструкцию для чего-то другого, кроме инициализации значений по умолчанию, предпочтительно нулевых . В идеале инициализированные таким образом переменные должны иметь одинаковое назначение, например, счетчики. Но если бы у меня было больше пары переменных с аналогичным назначением, я мог бы очень хорошо подумать о том, чтобы объявить их формой дубликатов, чтобы их можно было реорганизовать, например, в хэш.