Ruby `send` 与 `call` 方法

2024-03-15

我正在阅读一篇有关 Ruby 1.9 的文章。有很多用途call方法与Object.

但在最新版本的 Ruby 中,我得到了这个:

BasicObject.methods.include? :send # => true
BasicObject.methods.include? :call # => false
Object.methods.include? :call # => false

def foo
  puts 'text'
end

Object.send :foo # => text
Object.call :foo # => NoMethodError: undefined method `call' for Object:Class

我认为在 Ruby 的某些版本(可能是 1.9)中,方法被重命名了。但我不确定。请说清楚。


首先,send and call是两种截然不同的方法。

在 Ruby 中,面向对象的概念源于 Smalltalk。基本上,当你调用一个方法时,你是sending该对象amessage。所以,当你想动态调用一个对象的方法时,你调用的方法是send http://ruby-doc.org/core-2.3.0/Object.html#method-i-send。这个方法至少从 1.8.7 开始就存在于 ruby​​ 中。

在Ruby中,我们还有一个“块”的概念。块是do...end附加在方法调用末尾的东西。块可以是传统的yield编为;或者,完全有可能从块(一个Proc http://ruby-doc.org/core-2.2.0/Proc.html),然后将其传递出去。为了执行该块,您可以调用call http://ruby-doc.org/core-2.2.0/Proc.html#method-i-call在街区上。

call从未定义过Object, 然而send被定义在一切上。

(注:由于某种原因,call2.3.0文档中似乎没有文档;然而,它仍然存在,并且从 2.2.0 开始做同样的事情,所以我链接了那个。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby `send` 与 `call` 方法 的相关文章

  • 从外部 gem 增强模型

    我在用着炼油厂CMS http refinerycms com 在我们的网站上让较少的技术人员更新内容 在 gem 内部 它们有一个 Page 类 用于映射站点上的每个顶级页面 我想在这个 Page 类上使用acts as taggable
  • Ruby/Rails - 访问“查找”表而不对其进行建模?

    这是针对 Ruby on Rails 3 0 x 项目的 我有一个 查找 表 其中包含来自供应商的数据 当我从其他来源导入数据时 我想检查此表 加入 SKU 以获取额外数据 在我的应用程序中为该表创建模型对我来说似乎不合适 我的应用程序永远
  • 从模块中获取类名

    如何从模块中获取该模块包含的类的类名 module ActMethods def some method attr names cls self class this doesn t work end end 如何进入 cls 变量 加载此
  • 为什么 yaml 在生产中不可用?

    在我的 OS X 开发系统上 ruby version ruby 1 8 6 2007 03 13 patchlevel 0 universal darwin8 0 script console Loading development en
  • 如何查看移动设备是否已注册

    我正在使用适用于 Amazon SNS 的 Amazon AWS Ruby SDK 但在已注册的设备方面遇到一些问题 有时 当设备再次注册时 我会收到类似错误AWS SNS Errors InvalidParameter Invalid p
  • 如果不选择 Updated_at 属性,则无法更新 Rails 4 中的模型

    我正在从 Rails 3 2 13 升级到 4 并遇到更新模型的问题 我正在尝试仅更新模型上的单个属性 其中我只有 id 我还需要验证和回调 这在 Rails 3 中运行良好 但在 Rails 4 中遇到了麻烦 在 Rails 4 中 如果
  • 如何制作可选的强参数键但过滤嵌套参数?

    我的控制器中有这个 params require item permit 让我们假设这个 rspec 规范 它按预期工作 put update id item id item name new name 然而 以下原因ActionContr
  • 什么决定了可变类上的 bang 方法是否返回“nil”?

    通常 可变类上的 bang 方法 例如String Array or Hash return nil当没有进行任何修改时 但一些Array爆炸方法 即collect map reverse rotate shuffle sort sort
  • 我可以在 render.js 上执行的视图中使用 CoffeeScript 吗?

    我需要做什么才能在 Rails JS 视图中使用 CoffeeScript 例如 def index format js render layout gt false end 我需要做什么才能让 Rails 使用index js coffe
  • 将 gmaps4rails 与 https/SSL 结合使用

    我是 gmaps4rails 的忠实粉丝 它使向我们的网络应用程序添加地图变得非常容易 我现在遇到的唯一问题是 如果您在 https 页面上使用它 则会收到有关混合内容的安全警告 谷歌地图API确实支持https 所以我认为这只是将脚本引用
  • 如何在 Rails 应用程序中删除 URL 的尾部斜杠? (在 SEO 视图中)

    为了避免内容重复 我希望避免通过多个 URL 带或不带尾部斜杠 访问我的网站页面 目前 URL catalog product 1 and catalog product 1 导致同一页面 我的目标是将第二个 URL 重定向到第一个 当然是
  • 如何静默启动Sinatra + Thin?

    我有一个 Sinatra Base webservice 我想从命令行 Ruby 程序启动它 所以我有这个 command line program file require mymodule server puts Running on
  • 学习树顶

    我正在尝试自学 Ruby 的 Treetop 语法生成器 我发现 对于 最好的 文档来说 不仅文档非常稀疏 而且它的工作方式似乎并不像我希望的那样直观 从高层次上来说 我真的很喜欢比现场文档或视频更好的教程 如果有的话 在较低的层面上 这是
  • Ruby on Rails:如何使用 JSONPath 访问(并保存到数据库)JSON 数组中的嵌套对象/属性?

    我正在尝试将 JSON 对象数组中的数据播种到我的数据库中 我有两个单独的数据库表 属性和单位 一个属性有许多单位 我已经能够通过 API 请求 JSON 数据 然后将其播种到数据库 成功地对属性信息 属性模型 执行此操作 但是 Valua
  • 不使用 RVM 时的 Cron +

    我使用的是RVM环境 RUby 版本 2 1 2 导轨 4 1 1 schedule rb every 1 minute do runner note send mail end I used whenever update crontab
  • 关于空 own_to 关联的最佳实践

    想象一下以下情况 我有一个dog模型和一个house模型 一只狗可以属于一个房子 一个房子可以有很多只狗 所以 Class Dog lt ActiveRecord Base belongs to house end Class House
  • 未定义符号:尝试运行瘦网络服务器时的 SSLv2_method

    我已经用 rvm 安装了 OpenSSL rvm pkg install openssl 然后做了rvm reinstall 1 9 3 with openssl dir rvm path usr 当我尝试运行瘦网络服务器时 出现以下错误
  • Rails 中带有 text_field 的逗号分隔数组

    我有一些users可以有很多posts 并且每个帖子都可以有很多tags 我已经使用一个实现了拥有并属于许多帖子和标签之间的关系 创建新帖子时 用户可以使用逗号分隔的值列表对其进行标记 就像在 SO 上发布新问题时一样 如果任何标签尚不存在
  • 使用 PayPal REST API,如何取消付款?

    使用 PayPal REST API 在客户点击 取消订单并返回网站 链接后 我似乎无法弄清楚如何取消付款 也许在生产模式下 PayPal 会自动取消这些付款 但在沙盒模式下它们似乎仍处于 已创建 状态 这一观察结果使我相信 我需要在返回网
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail

随机推荐

  • 数据中的是什么?

    我使用OCaml版本4 02 3 我定义了一个类型self type self Self of self type self Self of self 及其实例s let rec s Self s val s self Self
  • 如何在 github actions 工作流程 ci 中通过 npm 安装私有 github 存储库

    我正在尝试通过运行在 github 工作流程 ci 中安装 npm 依赖项npm install 但是我收到以下错误 npm ERR Error while executing npm ERR usr bin git ls remote h
  • 计算列中的位数

    这是我的代码 select len cast code as float code from tbl1 where code is not null 这是输出 我想要代码栏中的位数 我不明白为什么最后一个算12而不是8 将其投射为int反而
  • 烦人的 python tesseract 错误打开数据文件时出错 ./tessdata/eng.traineddata

    我遇到了这个错误 这让我对 tesseract 的 python 包装器有点疯狂 这是一个名为 tesseract 的 python 模块 这是我尝试运行的 python 代码 img cv2 imread image 0 api tess
  • Android 12 闪屏 API 定制

    自从 Android 在 Android 12 中发布了新的 Splash Screen API 以来 许多应用程序都存在重复的启动屏幕 缺乏自定义等问题 现在 可以设置背景颜色和中间的图标 但是可以自定义更多吗 由于现在我们只能使用单色背
  • 在为 iPhone 开发时,您遇到的最讨厌的错误是什么? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 任何语言都有其著名且令人痛苦的错误
  • QPSQL 驱动程序未加载 Qt

    当我想添加数据库时遇到一些麻烦 dataBase QSqlDatabase addDatabase QPSQL 调用此方法后出现错误 QSqlDatabase QPSQL driver not loaded QSqlDatabase ava
  • 使用 Jackson 进行不可变/多态 POJO <-> JSON 序列化

    我正在尝试使用 Jackson 2 1 4 将不可变的 POJO 与 JSON 进行序列化 而无需编写自定义序列化程序并使用尽可能少的注释 我还希望避免仅仅为了满足 Jackson 库而添加不必要的 getter 或默认构造函数 我现在陷入
  • 我可以说构造函数是方法吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道我是否可以说构造函数是一个特殊情况method 你可以说什么 是否有人会不同意你的观点取决于具体情况 一些语言社区和标准以这种方式定义事
  • 如何在 Markdown 文件中输入 html 而不渲染?

    我想在 markdown 文件中输入以下句子 她说 h1 很大 我可以在 StackOverflow 中使用 h1 周围的三个反引号来完成此操作 但这不适用于 md 文件 我还尝试过单反引号 单引号 双引号 主题标签 间距 code h1
  • 这些“\e6##”字符是什么意思?

    https www keysurgical com assets scss objectsCustom icons scss https www keysurgical com assets scss objectsCustom icons
  • 在 Rcpp 中使用 arma::cube 制作 3d 数组显示立方体错误

    我正在为吉布斯采样制作 Rcpp 代码 在代码中 我首先想要创建一个 3 维数组 其中行数 迭代次数 500 列数 参数数 4 切片数 链数 3 我是这样写的 include
  • 通过实体框架创建记录时未插入数据库默认值

    我在 sql server 2008 中有一个登录记录表 其列结构如下 LoginId int identity UserId int LoginDateTime Allow nulls false default value getdat
  • Perl:if(列表中的元素)

    我正在寻找列表中是否存在某个元素 在Python中有一个in关键字 我会做类似的事情 if element in list doTask Perl 中是否有等效的东西 而无需手动迭代整个列表 UPDATE smartmatch 系列功能现已
  • AngularJs - .net MVC WebApi 身份验证示例

    我有一个 Net MVC WebApi 应用程序 并尝试专门用 Angularjs 编写前端 我可以通过 json 获取数据并对其进行操作 但我现在需要保护数据并将 Base64 身份验证添加到服务器上的标头中 当我浏览到一些 net 视图
  • 使用 C# ASP.NET MVC Identity 以编程方式创建用户

    我正在尝试以编程方式将用户添加到 ASP NET MVC Identity 我遇到的错误是 UserManager threw an exception of type System NullReferenceException 此函数是通
  • 使用 powershell 刷新 Excel 工作表

    我在一个名为 test 的文件夹中有 10 个不同的 Excel 工作表 我想使用 Windows Power shell 脚本刷新数据连接和数据透视表中的数据 该过程使用 for 每个循环打开每个文件 然后在文件中选择 powerpivo
  • 如何使用 UIAccessibility 协议将焦点捕获在 iOS 上的模式弹出窗口中?

    当用户单击 iOS 上的按钮时 我将启动自定义弹出窗口 在 iPhone 上使用画外音时 如何确保焦点保持在自定义弹出窗口内 出于可访问性原因 目前 当我向右滑动时 焦点落在父容器中的元素上 如果您的目标是 iOS gt 5 0 那么有一个
  • .NET 中 IIdentity 和 IPrincipal 背后的想法是什么

    那么 两者存在的目的是什么 IIdentity and IPrincipal 而不是一些IIdentityMergedWithPrincipal 什么时候在同一个类中实现两者还不够 另外 为了理解目的 我想知道这个概念来自哪里 它起源于 N
  • Ruby `send` 与 `call` 方法

    我正在阅读一篇有关 Ruby 1 9 的文章 有很多用途call方法与Object 但在最新版本的 Ruby 中 我得到了这个 BasicObject methods include send gt true BasicObject met