3

私はこのようなクラスを持っています:

class MainClass
  def self.method_one(String)
      puts "#{self.class} a"
  end
  def self.method_two(String)
      puts "#{self.class} a"
  end
end

そして、私は以下を継承するクラスを持っていますMainClass:

class NewClass < MainClass
  #any_mathod should match any method that is called for NewClass call
  def self.any_method(a,b)
     puts "#{self.class} b"
     super(a)
  end
end

たとえば、1 つではなく 2 つのパラメーターを受け入れるように、すべてを再定義せずに、MainClassそれらを実行するときにすべてのメソッドを拡張する方法はありますか?NewClassNewClass

NewClass.method_one(String1, String2)

そして、それは以下を生成します:

#=> NewClass String2
#=> MainClass String1

クラスString1内でパラメータを処理します。NewClass追加パラメーターのプロセッサーは、すべてのメソッドで同じになります。

4

3 に答える 3

2

多分あなたはsuper方法が欲しかった

class A
  def self.method_one(a)
    puts "a is #{a}"
  end
end

class B < A
  (superclass.methods - superclass.superclass.methods).each do |m|
    define_singleton_method(m) do |a, b|
      puts "b is #{b}"
      super(a)
    end
  end
end

B.method_one(5, 10)

# => b is 10
# => a is 5
于 2012-08-08T15:32:07.103 に答える
1

これを試して:

class MainClass
    def self.method_one(string)
        puts string
    end
    def self.method_two(string)
        puts string
    end
end


class NewClass < MainClass
    #Iterate through all methods specific to MainClass and redefine
    (self.superclass.public_methods - Object.public_methods).each do |method|
        define_singleton_method method do |string1, string2|
            #Common processing for String1
            puts string1 

            #Call the MainClass method to process String2
            super(string2)
        end
    end
end

NewClass は、MainClass で明確に定義されたすべてのメソッドを反復処理します。次に、String1 を処理する NewClass のクラス メソッドを定義し、次に MainClass メソッドを呼び出して String2 を処理します。

于 2012-08-08T15:48:10.030 に答える
0

Another approach is to ditch inheritance and use modules instead:

module TestModule
  def awesome1
  end
  def awesome2
  end
end

class TestClass
  def self.include mod
    puts (mod.instance_methods - Module.methods).sort
    super
  end
  include TestModule
end

Add singleton methods in the overridden #include as in the above answers.

于 2012-08-08T16:20:26.293 に答える