我是ruby的新手,有人可以解释第二行和第三行的内容吗?
a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)
第一行是将数组赋给变量a。
我完全迷失在第二和第三线。希望有人能给出一些细节解释。
感谢!!!
答案 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,2
是a[0]=2
。