我刚刚读到了send
在Ruby中的作用,当我看到这段代码时仍然感到困惑(它来自一个测验,但无论如何它已经过期了)
x = [1,2,3]
x.send :[]=,0,2
x[0] + x.[](1) + x.send(:[],2)
我知道第一行给x分配了一个数组
我真的很困惑,只是在网上找不到这些信息.
我找到了what send does,但我仍然有点困惑,对这段代码整体来说有点困惑.
我刚刚读到了send
在Ruby中的作用,当我看到这段代码时仍然感到困惑(它来自一个测验,但无论如何它已经过期了)
x = [1,2,3]
x.send :[]=,0,2
x[0] + x.[](1) + x.send(:[],2)
我知道第一行给x分配了一个数组
我真的很困惑,只是在网上找不到这些信息.
我找到了what send does,但我仍然有点困惑,对这段代码整体来说有点困惑.
首先,[]
(数组索引)和[]=
只是Ruby中的方法.x
是Array
,数组有[]=
方法,它接受两个参数,一个索引和一个要设置的值.
使用send
可以使用任意参数向对象传递任意"消息"(方法调用).
例如,您可以调用x.send :sort
向数组发送"sort"消息.不过,Sort不需要任何参数,所以我们不需要传递任何额外的参数.
另一方面,x#[]=
接受两个论点.它的方法可以被认为是这样的:
def []=(index, value)
self.set_value_at_index(index, value)
end
所以,我们可以用send :[]=, 0, 2
来调用它,就像调用x[0] = 2
一样.整洁,嗯?