使用先前在同一文件中定义的细化进行细化:可能吗?

时间:2014-08-21 21:06:43

标签: ruby

可悲的是,以下不起作用。时间无法响应(:format_to_my_datetime)。所以我的假设是同一文件中的优化不能互相使用。相反,在我定义ActiveSupport细化的地方,我需要在该文件中使用using TimeFormatter在该方法的上下文中细化时间。

但我错过了什么吗?除了在ActiveSupport上重新实现format_to_my_datetime(timezone)之外,有什么方法可以在一个文件中完成所有这些工作吗?

module TimeFormatter
  include MyFormats

  refine String do
    def format_to_my_name
      self.gsub(MY_NAME_FORMAT,"")
    end
  end

  refine Time do
    def format_to_my_datetime(timezone)
      self.getlocal(timezone).strftime(MY_DATETIME_FORMAT)
    end
  end

  refine ActiveSupport::TimeWithZone do
    def method_missing(method, *args)
      if Time.respond_to?(method)
         self.to_time.send(:method, *args)
      end
    end
  end
end

1 个答案:

答案 0 :(得分:0)

在这里找到我的答案:Why does `send` fail with Ruby 2.0 refinement?

事实证明,间接方法访问是specifically revoked for Refinements,这对我来说是一个巨大的失败:

  

==间接方法访问

     

任何间接方法访问,例如Kernel#send,Kernel#method和   内核#response_to?不得尊重调用者上下文中的优化   在方法查找期间。

     

注意:此行为将在以后更改。

     

=端