【问题标题】:Monkey Patching Time.strftime not being picked up by Time class猴子修补 Time.strftime 未被 Time 类拾取
【发布时间】:2012-04-04 19:51:01
【问题描述】:

我需要在 Windows 上使用 Rails 2.3 对 Ruby 1.8.7 中的 strftime 进行猴子补丁。在 config\initializers 我把这个 time_patch.rb 文件 (code below) 但它似乎没有捡起来:

if RUBY_PLATFORM =~ /mingw32|mingw64|mswin32|mswin64/

  class Time
    alias_method :original_strftime, :strftime
    def strftime(fmt)
      hour12 = "%2d" % ((hour + 11) % 12 + 1)
      original_strftime(fmt.gsub(/%l/, hour12))
    end
  end

end

我将方法重命名为 def blorping 并从 Rails 控制台执行 Time.methods 但没有看到新方法。

我需要做什么才能让它工作?

【问题讨论】:

  • 带有'def blorping'。 . .',试试 Time.now.methods
  • 它在那里显示...我做错了什么;即如何将其添加到 Time 类中?
  • strftime 是一个实例方法,这就是你想要的
  • @klochner 谢谢你的帮助。由于它不是答案形式,我发现了一些对我有用的其他答案并投票赞成
  • 没问题,我不需要业力

标签: ruby-on-rails ruby ruby-on-rails-2 ruby-1.8


【解决方案1】:

您在使用Time.methods 时正在检查类方法,因此您需要Time.instance_methods 之类的东西,以确保它已正确修补。

【讨论】:

  • 谢谢!这暴露了我在环境/测试方面遇到的其他问题
  • 您也可以在 Ruby 1.9 中查看Time.instance_method(:strftime).source_location 以查看该方法的定义位置。内部的应该返回nil,这是一个标志,它可能在 Ruby VM 中用 C 语言实现,但你的会显示源位置。
  • 我认为 source_location 在我绑定的 Ruby 1.8.7 中不可用。
猜你喜欢
  • 2012-06-14
  • 2016-10-30
  • 1970-01-01
  • 2011-04-25
  • 2014-03-05
  • 2012-10-13
  • 2012-03-13
  • 2013-12-26
  • 2012-03-29
相关资源
最近更新 更多