4

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

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

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

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

谢谢!!!

4

3 回答 3

14

.send 调用由符号标识的方法,将任何指定的参数传递给它。

a.send :[]=,0,2

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

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

因此a[0] = 2,将数组的第一个元素设置为2

执行后a.send :[]=,0,2a成为[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

于 2012-09-21T07:36:57.873 回答
3
a.send :[]=,0,2 ###same as a[0] = 2

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

a.send(:[],2) ## same as  a[1]
于 2012-09-21T07:37:26.097 回答
2

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

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

正如您在第 3 行中看到的, a.[](1)等效a[1]于任何类 C 语言。并且a.[]= 0,2a[0]=2

于 2012-09-21T07:42:25.423 回答