ruby - Ruby 中的发送方法

标签 ruby

我刚读到 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/

相关文章:

ruby - 为什么我不能将 "mkdir"与路径名对象一起使用?

ruby - 为什么 `method=` 没有像其他任何方法一样对待?

ruby-on-rails - 使用 FactoryGirl 验证 has_many 关联至少有一个模型

ruby-on-rails - 用于将钱存入用户帐户的图书馆?

ruby - 如何在没有继承方法的情况下获取类的公共(public)方法?

ruby-on-rails - Ruby on Rails : Operation now in progress - connect(2) would block

javascript - 表单 Jquery 函数

ruby-on-rails - `:location => ...`格式语句中的 `head :ok`和 'respond_to'是什么意思?

ruby-on-rails - Rails 将一列关联到许多相同类型的对象

ruby - 程序一起工作