这在Ruby中是什么,为什么它存在?

时间:2011-03-14 01:21:25

标签: ruby

是阵列吗?它的结构和用途是什么?为什么它存在于Ruby中?

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


=> [1,2,3,4]

为什么这个数组支持初始化?它可以用于任何潜在用途吗?为什么Ruby的设计者支持这种深奥的数组声明?

2 个答案:

答案 0 :(得分:5)

这是可以做到但可能不应该做的事情之一,因为它隐藏了它的意图背后的一层薄薄的聪明面纱,使其更难维护。

基本上,它在初始化其他变量时为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

答案 1 :(得分:4)

我认为这比进行有目的地初始化数组的方法更能产生多个变量赋值的副作用。

在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"