我刚读到 Ruby 中 send
的作用,但在查看这段代码时我仍然感到困惑(它来自测验,但无论如何它已经过期)
x = [1,2,3]
x.send :[]=,0,2
x[0] + x.[](1) + x.send(:[],2)
我明白第一行给x赋了一个数组
然后我根本不明白 :[] = ,0,2
做了什么,我也不明白为什么那里需要发送
我不明白 x.[](1)
和 x.send(:[],2) 在最后一行做什么
我真的很困惑,我只是无法在网上找到这些信息。
我找到了什么send does但我仍然对这段代码整体感到有点困惑和困惑。
最佳答案
首先,[]
(数组索引)和[]=
之类的东西只是Ruby 中的方法。 x
是一个数组
,数组有一个[]=
方法,它接受两个参数,一个索引和一个要设置的值。
使用 send
可以将任意“消息”(方法调用)传递给带有任意参数的对象。
例如,您可以调用 x.send :sort
将“排序”消息发送到数组。不过,Sort 不需要任何参数,所以我们不必向它传递任何额外的东西。
x#[]=
接受两个参数。它的方法可以认为是这样的:
def []=(index, value)
self.set_value_at_index(index, value)
end
因此,我们可以使用 send :[]=, 0, 2
调用它,就像调用 x[0] = 2
一样。整洁吧?
关于ruby - Ruby 中的发送方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892045/