3

これが私がやろうとしていることです。

# DSL Commands
command :foo, :name, :age
command :bar, :name

# Defines methods
def foo(name, age)
  # Do something
end

def bar(name)
  # Do something
end

基本的に、 を介して引数を処理する方法が必要define_methodですが、arg 配列ではなく、定義された数の引数が必要です (つまり*args)

これは私がこれまでに持っているものです

def command(method, *args)
  define_method(method) do |*args|
    # Do something
  end
end

# Which would produce
def foo(*args)
  # Do something
end

def bar(*args)
  # Do something
end

考え?

4

2 に答える 2

3

これに対する最善の回避策は、次のようなことだと思います。

def command(method, *names)
  count = names.length
  define_method(method) do |*args|

    raise ArgumentError.new(
      "wrong number of arguments (#{args.length} for #{count})"
    ) unless args.length == count

    # Do something
  end
end
于 2013-11-12T20:33:51.743 に答える