クラスメソッド内でインスタンスメソッドを定義する

class X
  def self.def_hoges
    def hoges
      :hoges
    end
  end
  def_hoges
end
X.new.hoges                      # => :hoges

ふと思い付いたので実験してみた。やっぱりできるんだなぁ。つい癖でdefine_methodを使ってしまうのだが。

class X
  def self.def_hoges
    def hoges # !> method redefined; discarding old hoges
      :hoges
    end
  end

  def hoges
    :old
  end

  def_hoges
end
X.new.hoges                      # => :hoges

overrideもできる。