1

我以通常的方式定义了一个 Sinatra 助手:

module Sinatra
  module FooHelper
    # code goes here
  end
end

在我的助手中,除其他外,我想添加一个方法Numeric

module Sinatra
  module FooHelper
    class ::Numeric
      def my_new_method
      end
    end
  end
end

但是,为了不显眼,我只想在我的 Sinatra 助手实际包含在应用程序中时才添加此方法;如果没有人运行helpers Sinatra::FooHelper,我不想影响任何东西(这似乎是对 Sinatra 扩展的合理期望)。

包含我的助手时是否会触发任何钩子,这将使我仅在发生这种情况时才添加我的方法?

4

1 回答 1

1

您可以使用该Module#included方法来执行此操作。我认为您需要稍微修改您的类定义才能使用class_eval. 我已经测试了以下内容,它按预期工作:

module Sinatra
  module FooHelper    
    def self.included(mod)
      ::Numeric.class_eval do
        def my_new_method
          return "whatever"
        end
      end
    end
  end  
end
于 2013-07-16T17:13:58.333 回答