Действительно ли правильно присвоить несколько переменных как это = b = c = d = 5?

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
54
задан Rizier123 14 February 2016 в 04:01
поделиться

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"
102
ответ дан 7 November 2019 в 07:50
поделиться

Нет ничего плохого в таком присваивании (a = b = c = d = 5). Лично я предпочитаю этот способ множественному присваиванию, если все переменные должны иметь одно и то же значение.

Вот другой способ:

a, b, c, d = [5] * 4
8
ответ дан 7 November 2019 в 07:50
поделиться

Эти две инициализации выражают разное значение. a = b = c = d = 5 означает, что «все мои переменные должны быть инициализированы одним и тем же значением, и это значение равно 5». Другой, a, b, c, d = 5, 5, 5, 5 , означает «У меня есть список переменных и соответствующий список начальных значений».

Ваша логика такова, что все переменные всегда должны быть одинаковыми? Тогда лучше первое. Если нет, может быть лучше второй. Другой вопрос: является ли ваш список из 4 переменных исчерпывающим? есть вероятность, что вы добавите или удалите другую переменную в эту группу? Если да, то я бы предложил другой вариант:

a = 5
b = 5
c = 5
d = 5
4
ответ дан 7 November 2019 в 07:50
поделиться

Я вообще не использую ruby, так что это может быть приемлемой идиомой, но a = b = c = d = 5 выглядит для меня довольно уродливо. a , b , c , d = 5, 5, 5, 5, 5 выглядит гораздо симпатичнее, IMO.

0
ответ дан 7 November 2019 в 07:50
поделиться

Если чувствуешь себя хорошо, сделай это.

Как вы обнаружили, язык это позволяет, и он ведет себя так, как вы ожидаете. Я бы предположил, что единственный вопрос, который вы должны задать себе, касается выразительности: говорит ли код вам, какова его цель?

Лично мне не особенно нравится использовать эту конструкцию для чего-то другого, кроме инициализации значений по умолчанию, предпочтительно нулевых . В идеале инициализированные таким образом переменные должны иметь одинаковое назначение, например, счетчики. Но если бы у меня было больше пары переменных с аналогичным назначением, я мог бы очень хорошо подумать о том, чтобы объявить их формой дубликатов, чтобы их можно было реорганизовать, например, в хэш.

7
ответ дан 7 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: