如何像instance_eval方法一样在块中更改self?

2024-02-21

instance_eval 方法在其块中更改 self,例如:

class D; end
d = D.new
d.instance_eval do
  puts self  # print something like #<D:0x8a6d9f4>, not 'main'!
end

如果我们自己定义一个方法(或任何其他方法(除了instance_eval)需要一个块),当打印self时,我们将得到'main',它与instance_eval方法不同。例如:

[1].each do |e|
  puts self  # print 'main'
end

我如何定义像instance_eval这样的方法(需要一个块)? 提前致谢。


您可以编写一个接受 proc 参数的方法,然后将其作为 proc 参数传递给 instance_eval。

class Foo
  def bar(&b)
    # Do something here first.
    instance_eval &b
    # Do something else here afterward, call it again, etc.
  end
end

Foo.new.bar { 把自己放上去 }

Yields

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

如何像instance_eval方法一样在块中更改self? 的相关文章

  • Ruby on Rails 3:Devise::LdapAdapter.get_ldap_param 未定义方法错误

    我在跑步 红宝石 1 9 3p0 轨道 3 1 1 设计1 4 9 Devise ldap authenticatable 0 4 10 我正在使用 Devise 通过 LDAP 服务器验证我的 Rails 应用程序 我使用用户名而不是电子
  • Ruby 中 const_get 的行为令人困惑?

    根据文档mod const get sym 返回 mod 中指定常量的值 我也知道const get默认情况下可以查找接收者的继承链 所以以下工作 class A HELLO hello end class B lt A end B con
  • 在 Ruby 中创建数字、字符串、数组或哈希的 md5 哈希

    我需要在 Ruby 中为变量创建签名字符串 其中变量可以是数字 字符串 哈希值或数组 哈希值和数组元素也可以是这些类型中的任何一种 该字符串将用于比较数据库 在本例中为 Mongo 中的值 我的第一个想法是创建 JSON 编码值的 MD5
  • Ruby - Array.find,但返回块的值

    我有一个数组 我想要返回真值 也称为非零 的第一个块的结果 问题是 在我的实际用例中 测试有副作用 我实际上是在一组队列上迭代 并从顶部弹出 所以我不需要在第一次成功之后评估该块 a b c 1 2 3 a b c first but va
  • Ruby On Rails 更新 Heroku 动态路由

    我有一个使用应用程序范围的 slugs 的应用程序 使用懒惰的宝石 https github com RISCfuture slugalicious与 Sluggable 表 并使用以下代码路由到这些 slugs Slugs begin S
  • Ruby 使用 JSON 序列化结构

    我正在尝试将一个简单的结构序列化为 JSON 它工作正常 但我无法让它从 JSON 创建该结构的实例 我正在尝试这样做 require rubygems require json Person Struct new name age jso
  • 计算具有特定子集大小的集合分区

    给定一组n元素 我需要找到该集合的所有分区k大小几乎相等的子集 例如 对于一个包含 7 个元素和 3 个子集的集合 我只需要其中有两个子集 每个子集包含 2 个元素 和一个子集包含 3 个元素的分区 我不想要一个包含 1 2 和 4 个元素
  • Rails,如何提交带有文本链接的表单?

    我正在尝试正确提交此表单 这是我到目前为止所拥有的 并且按钮使用以下代码呈现 li li 我正在使用动作创建 这是正确的吗 这是呈现的表单标签
  • Ruby 请求 https - “在‘read_nonblock’中:连接被对等方重置 (Errno::ECONNRESET)”

    这是我的代码 domain http www google com url URI parse https graph facebook com fql q SELECT 20url normalized url 20FROM 20link
  • 如何在 Ruby 中将…(省略号)更改为…(三个句点)?

    我正在解析这个文件 http msdn microsoft com en us library ms189782 aspx using nokogiri 我发现有一些 省略号 该页面中的字符且无法删除 我想知道如何用Ruby来替换所有 省略
  • Hstore 和 Rails

    我正在尝试使用最新版本的 activerecord postgres hstore gem 在 Rails 3 2 9 项目中使用 Hstore 但在使用 ActiveRecord 提供的 store accessor 来获取 Hstore
  • Ruby 脚本即服务

    嗯 标题说明了一切 我有一个 ruby 脚本 我想在我的 Linux 机器上作为一项服务 我可以启动和停止 运行 我找到了如何在 Windows 上执行此操作here https stackoverflow com questions 16
  • 如何使用 devise_invitable 发送自定义邀请

    我是 ruby 新手 使用 devise invitable gem 进行邀请 每条指令都正确发送 现在我想添加一个自定义主题 该主题将具有受邀者姓名和董事会名称以及与主题相同的自定义内容 我如何在以下操作方法中执行此操作而不使用额外的自定
  • “修补”rails 渲染函数来编辑默认选项

    当我在 Rails 中渲染 xml 时 我总是想要 dasherize gt false 选项 有没有办法将其设置为应用程序范围的默认值 当然无需修改 Rails 源代码 也许一个渲染函数以某种方式优先于第一个函数 然后使用此选项调用它 这
  • 验证表单中是否存在嵌套属性

    我有以下协会 models contact rb class Contact lt ActiveRecord Base has many contacts teams has many teams through contacts acce
  • 为什么数组前需要加星号?

    我不知道这是哈希问题还是数组问题 但我不明白为什么第三个示例中需要星号 才能获得填充数据的哈希 如果没有它 它会输出一个空的哈希值 coding utf 8 require pp pp first name Shane last name
  • 在 Rails 中使用 RSpec 和 Capybara 时未定义的方法“visit”

    我无法让水豚与 rspec 一起工作 它给了我这个错误 undefined method visit for
  • 如何在 Rails 3 的功能测试中使用 polymorphic_path

    我正在尝试使用polymorphic path在 Rails 3 的功能测试中 一开始我会得到 NoMethodError undefined method polymorphic path for
  • 黄瓜使用标签自动重新运行失败的场景?

    在我们的构建中 某些场景会由于我们无法控制的原因或需要很长时间才能正确调试而失败 诸如异步javascript之类的东西 无论如何 重点是有时它们工作 有时不工作 所以我认为最好向场景添加一个标签 例如 rerun on failure 或
  • 使用带有部分模板文件的 i18n gem 时出现问题

    我正在使用 Ruby on Rails 3 1 我想知道如何正确处理与部分模板文件相关的国际化 那是 在我的app views users flag html erb我有的文件 在我的app views users flag form ht

随机推荐

  • 压缩 XML 指标。

    我有一个客户端服务器应用程序 它通过 TCP IP 将 XML 从客户端发送到服务器 然后广播到其他客户端 我如何知道 XML 的最小大小可以通过压缩 XML 而不是通过常规流发送来保证性能改进 有什么好的指标或例子吗 Xml 通常压缩得很
  • 为什么有各种 JPEG 扩展名?

    在开发下载器时 我遇到了以下使用 Python 的情况mimetypes guess extension功能 In 2 mimetypes guess extension image jpeg strict False Out 2 jpe
  • 当 wifi 打开时,仅通过 Android 手机上的移动数据发送数据

    即使 wifi 已打开并连接到互联网 是否也可以通过移动数据以编程方式路由请求 我的应用程序需要调用运营商提供的服务 该服务只能通过移动数据使用 而且我认为要求关闭 wifi 不太方便 看一眼https developer android
  • 多对多关系的3表之间的SQL查询

    我有三张桌子 friends locations friend location friend location是一个连接表 允许多对多关系friends and locations 所以表格看起来像这样 Friends ID Name 1
  • WooCommerce:管理员手动创建订单时需要挂钩

    我的网站之一使用 WooCommerce 客户有时希望在订单管理中手动创建订单 WooCommerce gt 订单 gt 添加订单 当他们单击该页面上的 保存订单 时 我需要对订单进行一些额外的处理 有可用的钩子吗 我浏览了 WooComm
  • Microsoft 聊天机器人 (Node.js) 是否在单个 LUIS.AI 应用程序中支持多种语言?

    我有一个使用 Node js 在 Microsoft 机器人框架中构建的聊天机器人 并将该机器人与名为 LUIS AI 智能的 NLP 框架集成 以根据用户的意图和实体处理用户对话 在这里 我需要这个机器人在单个 LUIS 应用程序中支持多
  • awk 查找重叠

    我有一个包含列的文件 如下所示 Group Start End chr1 117132092 118875009 chr1 117027758 119458215 chr1 103756473 104864582 chr1 10509379
  • 寻找 C++ 中搜索和替换的圣杯

    最近 我正在寻找一种替换字符串中标记的方法 这本质上是查找和替换 但至少还有一种解决问题的方法 看起来像是相当平庸的任务 我已经提出了几种可能的实现 但从性能的角度来看 它们都不能令人满意 最好的成绩是每次迭代约 50us 这种情况很理想
  • 如何从构造函数内的原型对象检索属性

    我认为这个问题本身就很解释 我正在尝试检索构造函数对象内原型对象内部的特定属性 如果我无法检索它 我希望有人能解释为什么我不能检索它 这是来自的代码jsfiddle https jsfiddle net 786ze44b JavaScrip
  • 缩放级别 15 相当于什么?

    出于某种原因 这似乎比我想象的更难找到 我正在使用地图显示 并将缩放级别设置为 15 mapController setZoom 15 不同的缩放级别等于多少距离 我假设是某种对数或指数尺度 如果我选择 1 或 18 作为缩放级别 则地图上
  • DBIx::Class 中的子查询

    我在这上面花了太多时间 但仍然无法让语法起作用 这个 select 语句可以在 DBIx Class 中使用吗 SELECT A id A name count C a id AS count1 SELECT count B id FROM
  • Matplotlib 动画使用 ArtistAnimation 更新标题

    我正在尝试使用 ArtistAnimation 来创建动画 一切都正常 除了set title不工作 我不明白为什么blit False不起作用 我需要去吗 函数动画 https stackoverflow com questions 44
  • 如何为 Angular 6 Bootstrap 4 modal 进行茉莉花单元测试用例

    html
  • 使用 jQuery 重新排序和动画列表项?

    所以 我有一个项目列表 例如 ul li List item 1 li li List item 2 li li List item 3 li ETC 定期触发 ajax 调用 我可能需要重新排序列表 通过使较低的项目之一成为列表中的第一个
  • 使用 C++ 调用不正常地重新启动 Mac OS X?

    如何使用以下命令重新启动 Mac OS XC 不是 Objective C 而不调用任何子进程 不在乎是不是不优雅的 system reboot Is not acceptable as it relies on invoking a pr
  • Oracle复合主键/外键问题

    我在 Oracle 的 1 个表中有一个复合主键 我想为第二个表中的一个表条目创建一个外键 该外键引用第一个表中的复合主键 我收到错误 ORA 02256 关于如何进入这个有什么想法吗 CREATE TABLE groupspersonx
  • Java:如何在 Spring 框架中声明嵌套映射?

    例如 您将如何声明一个三重映射 例如 Map
  • 为什么 PyCharm 在此处使用 @property 时会发出警告?

    在教程中 我看到了两种用于使用 property 的实例属性命名类型 这是显示两者示例的代码 它们的工作方式似乎也不同 class A def init self x self x x property def x self return
  • 循环内部 lambda

    我需要尽可能简化我的代码 它需要是一行代码 我需要在 lambda 表达式中放置一个 for 循环 如下所示 x lambda x for i in x print i 以防万一 如果有人正在寻找类似的问题 这里给出的大多数解决方案都是一行
  • 如何像instance_eval方法一样在块中更改self?

    instance eval 方法在其块中更改 self 例如 class D end d D new d instance eval do puts self print something like