我是 ruby 新手,有人可以解释第二行和第三行的作用吗?
a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)
第一行是将数组分配给变量 a。
我完全迷失在第二和第三线。希望有人能给出一些详细的解释。
谢谢!!!
我是 ruby 新手,有人可以解释第二行和第三行的作用吗?
a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)
第一行是将数组分配给变量 a。
我完全迷失在第二和第三线。希望有人能给出一些详细的解释。
谢谢!!!
.send
调用由符号标识的方法,将任何指定的参数传递给它。
a.send :[]=,0,2
和
a.send(:[]=, 0, 2)
表示在数组对象上调用[]=0
方法,第一个参数为 as ,第二个参数为2
.
因此a[0] = 2
,将数组的第一个元素设置为2
。
执行后a.send :[]=,0,2
,a
成为[2, 7, 8]
。
a.[](1)
和a[1]
a.send(:[], 2)
a.[](2)
与which is相同a[2]
。
所以a[0] + a.[](1) + a.send(:[],2)
等于a[0] + a[1] + a[2]
等于2 +7 + 8
等于17
。
a.send :[]=,0,2 ###same as a[0] = 2
a.[](1) ### same as a[1]
a.send(:[],2) ## same as a[1]
您可以尝试 irb 中的代码,看看会发生什么。send
表示向对象发送以下消息。此功能继承自 Smalltalk。
所以a.send :[]=,0,2
意味着将参数发送:[]=,0,2
到a。括号被省略。第一个参数:[]=
是要调用的方法a
。从:
手段开始,它是一个符号。[]=
是方法名称。send 的其他参数被视为 的参数[]=
。
正如您在第 3 行中看到的, a.[](1)
等效a[1]
于任何类 C 语言。并且a.[]= 0,2
是a[0]=2
。