Подтвердить что ты не робот

Правильно ли назначать такие переменные как a = 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
4b9b3361

Ответ 1

Что нужно знать о том, что ваш случай работает только нормально, потому что номера неизменяемы в 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"

Ответ 2

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

Здесь другой способ:

a, b, c, d = [5] * 4

Ответ 3

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

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

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

Ответ 4

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

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

a = 5
b = 5
c = 5
d = 5

Ответ 5

Я однажды укусил этот. Сегодня это может спасти вас несколькими нажатиями клавиш, но потом укусить вас. Как упоминал @glenn, он создает несколько ссылок на один и тот же объект.

Пример. Это относится как к ruby ​​ 1.8, так и к 1.9

> a = b = Array.new
=> []
> a.object_id == b.object_id
=> true
> a << 1
=> [1]
> b << 2
=> [1, 2]

Ответ 6

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