删除/取消定义另一个模块包含的类方法

时间:2011-09-27 13:55:49

标签: ruby metaprogramming

我想删除一个通过include函数添加到我的类中的类方法。例如:

class Foo
    include HTTParty

    class << self
      remove_method :get
    end
end

这不起作用,它说“get”不是Foo的方法。基本上,“get”方法是HTTParty模块提供的,我想删除它。我尝试了几次没有运气的尝试。我读过/试过的东西:

1 个答案:

答案 0 :(得分:8)

使用undef代替remove_method

require 'httparty'

class Foo
  include HTTParty
  class << self
    undef :get
  end
end

Foo.get #=> NoMethodError: undefined method `get' for Foo:Class
  

取消方法定义。 Undef无法出现在方法中   身体。通过使用undef和别名,类的接口可以是   独立于超类修改,但请注意它可能已被破坏   程序通过内部方法调用自我。   http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/syntax.html#undef