Что это такое в Ruby и почему оно существует? - PullRequest
2 голосов
/ 14 марта 2011

Это массив? Какова его структура и использование? Почему он существует в Ruby?

>> Z =  x=1 , y =2 , a =3 , b=4


=> [1,2,3,4]

Почему этот массив поддерживает инициализацию? Может ли это быть какое-либо потенциальное использование? Почему разработчики Ruby поддерживают такое объявление эзотерического массива?

Ответы [ 2 ]

5 голосов
/ 14 марта 2011

Это одна из тех вещей, которые можно сделать, но, вероятно, не следует, потому что она скрывает, что ее намерение скрывается за тонкой завесой хитрости, делая ее труднее поддерживать.

По сути, это присвоение массива Z при инициализации других переменных.

Z =  x=1 , y =2 , a =3 , b=4 #=> [1, 2, 3, 4]
Z #=> [1, 2, 3, 4]
x #=> 1

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

Z = [1, 2, 3, 4]

x, y, a, b = *Z

или

(x, y, a, b) = Z
4 голосов
/ 14 марта 2011

Я бы сказал, что это скорее побочный эффект от возможности назначения нескольких переменных, чем способ целенаправленной инициализации массива.

В Ruby вы можете назначать несколько значений одновременно, используя массив, вы можете вернуть несколько значений из метода.Это также возвращается в виде массива.Кроме того, поскольку каждое выражение в Ruby имеет возвращаемое значение, x = 1, y = 2 также возвращает значения для обеих операций присваивания в массиве.

ruby-1.9.2-p136 :001 > a, b = 3, 4
 => [3, 4] 
ruby-1.9.2-p136 :002 > a
 => 3 
ruby-1.9.2-p136 :003 > b
 => 4 
ruby-1.9.2-p136 :004 > def my_method
ruby-1.9.2-p136 :005?>   return "value1", "value2"
ruby-1.9.2-p136 :006?>   end
 => nil 
ruby-1.9.2-p136 :007 > my_method
 => ["value1", "value2"] 
ruby-1.9.2-p136 :008 > x = my_method
 => ["value1", "value2"] 
ruby-1.9.2-p136 :009 > x, y = my_method
 => ["value1", "value2"] 
ruby-1.9.2-p136 :010 > x
 => "value1" 
ruby-1.9.2-p136 :011 > y
 => "value2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...