我是 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。