我刚刚读到了send在Ruby中的作用,当我看到这段代码时仍然感到困惑(它来自一个测验,但无论如何它已经过期了)

x = [1,2,3]
x.send :[]=,0,2
x[0] + x.[](1) + x.send(:[],2)

我知道第一行给x分配了一个数组

我真的很困惑,只是在网上找不到这些信息.

我找到了what send does,但我仍然有点困惑,对这段代码整体来说有点困惑.

推荐答案

首先,[](数组索引)和[]=只是Ruby中的方法.xArray,数组有[]=方法,它接受两个参数,一个索引和一个要设置的值.

使用send可以使用任意参数向对象传递任意"消息"(方法调用).

例如,您可以调用x.send :sort向数组发送"sort"消息.不过,Sort不需要任何参数,所以我们不需要传递任何额外的参数.

另一方面,x#[]=接受两个论点.它的方法可以被认为是这样的:

def []=(index, value)
  self.set_value_at_index(index, value)
end

所以,我们可以用send :[]=, 0, 2来调用它,就像调用x[0] = 2一样.整洁,嗯?

Ruby相关问答推荐

数组切片中没有左边框的Ruby范围

我在哪里可以找到积极开发的 Ruby lint 工具?

使用 Bundler 时,为什么要关心 RVM 的 Gemset 功能?

如何在 Ruby 中生成子进程?

无法在 Heroku 教程中使用 Python 启动工头

如何从正在运行的脚本进入 IRB 提示符?

C# ?? Ruby 中的运算符?

Ruby:获取不带扩展名的文件名

将Elastic search限制设置为无限制

Ruby,生成随机十六进制 colored颜色

在 Ruby 中计算中位数

如何在Ruby中获取给定月份的天数,占年份?

对哈希中数组的值求和

如何使用 Nokogiri 删除 node ?

获取Ruby中当前目录的父目录

如何使用 link_to Ruby on rails 添加确认消息

Ruby 疯狂:类与对象?

=== 与 == 在 Ruby 中

为什么 Ruby setter 需要self .班级内的资格?

Docker for Mac - mkmf.rb 找不到 ruby​​ 的头文件