如何在 Ruby 中取消类的定义?

2024-01-08

在 Ruby 中取消定义方法非常简单,我可以使用undef METHOD_NAME.

有类似的班级吗?我在MRI 1.9.2.

我必须取消定义 ActiveRecord 模型,运行两行代码,然后将模型恢复到其原始形式。

问题是,我有一个模型Contact我正在使用一家公司的 API,碰巧他们有一些名为Contact,更改我的型号名称对我来说会是很多工作。

在这种情况下我能做什么?


class Foo; end
# => nil
Object.constants.include?(:Foo)
# => true
Object.send(:remove_const, :Foo)
# => Foo
Object.constants.include?(:Foo)
# => false
Foo
# NameError: uninitialized constant Foo

EDIT刚刚注意到您的编辑,删除常量可能不是实现您正在寻找的内容的最佳方法。为什么不只移动其中之一Contact类放到单独的命名空间中。

EDIT2您还可以像这样暂时重命名您的班级:

class Foo
  def bar
    'here'
  end
end

TemporaryFoo = Foo
Object.send(:remove_const, :Foo)
# do some stuff
Foo = TemporaryFoo
Foo.new.bar #=> "here"

再说一遍,这样做的问题是你仍然会拥有更新的Contact类,所以你必须再次删除它。我真的建议您在类中设置名称间距。这也将帮助您避免任何加载问题

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

如何在 Ruby 中取消类的定义? 的相关文章

随机推荐

  • 捕获异常但使用 Sidekiq 重试

    默认情况下 sidekiq 将重试任何引发异常的作业 没事儿 但是 我希望能够捕获该异常 以便我的异常处理程序不会收到通知 然后重试该作业 我如何在反应中实现这一点 所以我的代码如下所示 def perform rescue ExcClas
  • 发送固定长度的 TCP 帧

    我需要使用 TCP 通过具有固定非标准 MTU 例如 1560 的子网发送一些数据 如果帧的长度小于 MTU 则通过该子网传输的所有以太网帧都应手动填充 0 所以 数据大小应该是 1560 sizeof IP 标头 sizeof TCP 标
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • Pandas:使用列值的随机采样替换 NaN

    我有一个数据框 df 包含多个列 中的一些值df are NaN 我想更换每个NaN具有有效值 通过从给定列中的其他值中随机采样来选择 例如 如果 df work 4 7 NaN 4 我想更换df work 2 4 2 3 的时间和 7 1
  • Newtonsoft.Json.JsonSerializationException(从“System.Data.SqlTypes.SqlDouble”上的“Value”获取值时出错)序列化 SqlGeography

    我尝试序列化一个DataTable在数据库 SQL Server 2012 中使用 Newtonsoft Json 版本 Newtonsoft Json 10 0 3 将对象转换为 Json 该表有一列类型为 geography 其中包含类
  • :"缺少图片","error_user_msg":"请指定与此广告一起投放的图片

    我遇到了这个错误并且 缺少图片 error user msg 请指定与此广告一起投放的图片 奇怪的是 fcebook 返回给我图像的哈希值 Api init APP ID APP SECRET ACCESS TOKEN user new A
  • 是否可以使用fcm推送通知来开发flutter windows桌面?

    我正在考虑使用 dart 和 flutter 开发一个 Windows 桌面应用程序 但我不知道如何将 Firebase 云消息传递与其集成 任何建议将不胜感激 提前致谢 目前 firebase messaging flutter 包中没有
  • CSS 中设备屏幕分辨率如何缩放?

    以下是一些流行手机的屏幕分辨率 iPhone 6 1334 x 750 三星盖乐世 S5 1920x1080 在 CSS 中 我们有媒体查询 例如 media only screen max width 600px 这是针对小屏幕的 上面两
  • Android 2.1 gridview不显示

    我正在尝试在网格视图中显示一些图像 我的代码适用于 android 2 2 和 2 3 但不适用于 2 1 在 android 2 1 中 网格始终是空的 不可见的 我用于网格视图的代码是这样的 gridview GridView find
  • 上传 Twitter 视频错误 (PHP)。 API 响应:分段加起来不等于提供的总文件大小

    我正在尝试使用 API 和 tmhOAuth 请求将视频上传到 Twitter 但是我从 Twitter 收到错误 片段加起来不等于提供的总文件大小 我检查了块大小与 INIT 命令中提供的大小它们是相等的 你能帮我找到解决方案吗 这是我用
  • 来自 nginx 的 $ssl_early_data:应用程序应该以某种方式使用它吗?

    我正准备开启nginxssl early data https nginx org en docs http ngx http ssl module html ssl early data使用 TLS 1 3 启用 RTT 0 我知道 如果
  • 休眠合并

    我正在测试休眠状态并将此查询提供给 transaction session beginTransaction city new City A city City session merge city city setName B trans
  • 如何禁用/删除离子按钮 Ionic 4 中的离子波纹效果?

    我需要禁用默认设置ion ripple effect在 离子按钮 中
  • 为工作单元上的多个 EF 上下文做准备 - TransactionScope

    我正在考虑实现处理多个数据源的单个工作单元的选项 实体框架 我想出了一个尝试性的方法 现在处理单一上下文 但这显然不是一个好主意 如果我们分析下面的代码 您会认为它是一个糟糕的实现吗 事务范围的生命周期是否是一个潜在问题 当然 如果我们用不
  • Pandas 数据框按多列分组

    给定一个包含两个日期时间列的数据框A and B和一个数字列C 如何分组month两者的A and B and sum C i e In 1 df Out 1 A B C 0 2013 01 01 2013 01 01 0 282863 1
  • 在窗口函数的 FILTER 子句中引用当前行

    In PostgreSQL 9 4窗口函数有一个新选项FILTER选择窗框的子集进行处理 文档提到了它 但没有提供示例 在线搜索产生了一些样本 包括来自第二象限 http blog 2ndquadrant com the within gr
  • 将字符串转换为嵌套列表中的浮点数

    我有一个列表列表 其中包含数字和单词字符串 我只想将那些数字字符串转换为浮点数 aList hi 1 33 bye 1 555 首先 您需要一个函数来执行 如果可能的话将字符串转换为浮点数 否则将其保留为字符串 def floatify s
  • VB.Net 表单非共享方法被引用为共享方法?

    尽管我主要是一名 C 开发人员 但我正在为 VB Net 应用程序提供支持 我遇到过我认为 奇怪 的代码 因为我的 C 思维方式告诉我该代码是错误的 不应该编译 但它确实编译了 我做了一个查找所有参考文献在特定的表单上查看它的使用位置 并找
  • 母版页和视图中的表单

    我有一个母版页 我的所有视图都继承自该母版页 我遇到的问题是在母版页中创建的表单标签 然后是在视图中创建的表单标签 由于表单位于母版页表单内 因此我的所有回发都会发送到控制器 Index 方法 这迫使我创建一个新方法 Index 来强制使用
  • 如何在 Ruby 中取消类的定义?

    在 Ruby 中取消定义方法非常简单 我可以使用undef METHOD NAME 有类似的班级吗 我在MRI 1 9 2 我必须取消定义 ActiveRecord 模型 运行两行代码 然后将模型恢复到其原始形式 问题是 我有一个模型Con