Массив показывает весь список переменных вместо одной конкретной

Допустим есть строка с определенными переменными:

a1= '1Х ', a2= '2X', a3= '3X', b1= '1Y', b2= '2Y', b3= '3Y', c1= '1Z', c2= '2Z', c3= '3Z'

и есть массив с ними:

mass = [a1, a2, a3, b1, b2, b3, c1, c2, c3]

если я хочу посмотреть что находится в ячейке mass[1] или mass[2] то все ок. Пишем: puts mass[1] или puts mass[2] и программа показывает на что указывают переменные. Но. Когда я смотрю на первую переменную из строки переменных а1 и пишу puts mass[0], то мне показывает всю строку переменных целиком, все 9 штук. Причем не важно какую ячейку в массиве занимает эта первая переменная а1. Если ее сместить в середину массива, например [a2, a3, b1, b2, b3, а1, c1, c2, c3] и запросить puts mass[5], то все равно покажет целиком всю строку переменных. Почему?


Ответы (1 шт):

Автор решения: Василиса

Потому что именно так работает то, что вы написали в первой строке :)

Если вы хотите присвоить значение сразу нескольким переменным, то это будет выглядеть вот так:

a1, a2, a3, b1, b2, b3, c1, c2, c3 = "1Х ", "2X", "3X", "1Y", "2Y", "3Y", "1Z", "2Z", "3Z"

При этом из значений с правой стороны знака = неявным образом создаётся массив. То есть, если я напишу

a = 1, 2, 3

то в переменной a будет лежать [1, 2, 3]

В вашем случае вы по сути переменной a1 присваиваете список значений через запятую '1Х ', a2= '2X', a3= '3X', b1= '1Y', b2= '2Y', b3= '3Y', c1= '1Z', c2= '2Z', c3= '3Z'. В результате создаётся массив, каждый элемент которого присвоен своей переменной (a2= '2X', a3= '3X' и так далее), и этот массив присваивается a1.

Если вы хотите записать несколько присвоений (или любых других выражений) в одну строку, используйте ; в качестве разделителя, и всё получится. Хотя в руби и не принято так писать, это работает:

a1 = '1Х '; a2 = '2X'; a3 = '3X'; b1 = '1Y'; b2 = '2Y'; b3 = '3Y'; c1 = '1Z'; c2 = '2Z'; c3 = '3Z'
→ Ссылка