ruby使用send将值传递给数组

时间:2012-09-21 07:30:29

标签: ruby

我是ruby的新手,有人可以解释第二行和第三行的内容吗?

a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)

第一行是将数组赋给变量a。

我完全迷失在第二和第三线。希望有人能给出一些细节解释。

感谢!!!

3 个答案:

答案 0 :(得分:12)

.send调用symbol标识的方法,并将指定的参数传递给它。

a.send :[]=,0,2

相同
a.send(:[]=, 0, 2)

表示对数组对象调用[]=方法,第一个参数为0,第二个参数为2

所以这是a[0] = 2,将数组的第一个元素设置为2

执行a.send :[]=,0,2后,a变为[2, 7, 8]

a.[](1)a[1]

相同

a.send(:[], 2)a.[](2)相同,a[2]

所以a[0] + a.[](1) + a.send(:[],2)等于a[0] + a[1] + a[2]等于2 +7 + 8等于17

答案 1 :(得分:3)

a.send :[]=,0,2 ###same as a[0] = 2

a.[](1) ### same as a[1]

a.send(:[],2) ## same as  a[1]

答案 2 :(得分:2)

您可以尝试使用irb中的代码,看看会发生什么。 send表示将以下消息发送到对象。此功能继承自Smalltalk。

所以a.send :[]=,0,2表示将参数:[]=,0,2发送给a。括号被省略。第一个参数:[]=a要调用的方法。以:开头意味着它是一个符号。 []=是方法名称。 send的其他参数被视为[]=的参数。

正如您在第3行中所看到的,a.[](1)相当于任何类C语言中的a[1]a.[]= 0,2a[0]=2