4

メソッドを動的に追加し、複数のパラメーターを許可できるクラスを作成したいと考えています。

例えば:

r = Robot.new
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" }
r.turn 50 # => turning 50 degrees
r.turn 50, 60 # => turning 50 degrees # => turning 60 degrees

私の最初の試みはこれでした:

def learn_maneuvering(name, &block)
    define_singleton_method(name, &block) 
end

ただし、1 つのパラメーターのみを考慮します。

私はそれから始めました:

def learn_maneuvering(name, &block)
    define_singleton_method(name) do |*args|
        # to do
    end
end

すべての引数が正しく使用されるまで、これはループすると思いますか? とにかく、これらの引数を指定されたブロックに渡す方法がわかりません。

4

1 に答える 1

7

あなたは近いです:

def learn_maneuvering(name, &block)
  define_singleton_method(name) do |*args|
    args.each do |arg|
      block.call(arg)
    end
  end
end

r = Robot.new
r.learn_maneuvering('turn') { |degree| puts "turning #{degree} degrees" }

r.turn 50, 60

プリント:

50 度
回転 60 度回転

しかし、これは本当にあなたが望むものですか?やってるだけみたい

r.turn 50
r.turn 60

私にはもっと理にかなっています。

于 2012-08-25T02:27:23.483 に答える