ruby - 如何覆盖 Ruby 中的要求?

标签 ruby

我需要从一个 Ruby 文件中覆盖 require,我的 start.rb 需要它,它是应用程序入口点。 rubygems 在此之前加载,在 start.rb 中。

我尝试的一切都给我一个堆栈溢出错误。

正确的做法是什么?

最佳答案

一般来说,如果你想给一些内置方法打补丁,你应该先给原来的方法起一个别名。大多数时候,您会在覆盖方法的某处调用旧方法。否则,您将失去原始方法的功能,并且很可能会破坏应用程序逻辑。

  1. 使用ri require 或阅读文档找出定义require 方法的位置。您会发现它位于 Kernel 模块中。此外,您会找到它的方法签名,这样您就知道参数列表是什么样子的。
  2. Monkey 补丁模块内核不要破坏功能,除非您清楚自己在做什么。
module Kernel
  # make an alias of the original require
  alias_method :original_require, :require

  # rewrite require
  def require name
    puts name
    original_require name
  end
end

# test the new require
require 'date'

关于ruby - 如何覆盖 Ruby 中的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661788/

相关文章:

ruby-on-rails - Rails Anemone 和 Postgres 只存储 URL

php - 什么等同于 php 中 ruby​​ 的 =~?

ruby - 在生产环境中调试 Sinatra 应用程序时遇到问题

ruby - Rvm:无法卸载 bundle 程序 1.1.0

ruby-on-rails - 如何使用 rspec 测试使用 rails runner 制作的预算

ruby-on-rails - rails : Smart text truncation

ruby-on-rails - rails + 设计 : Update user with or without pasword

使用 Ruby 进行 MySQL CASE SELECT

ruby - 在 ruby​​ 中对数组进行排序的最简单代码?

ruby - 使用 Ruby 创建 Verilog 解析器