3

これに対する答えがあるかどうかはわかりませんが、誰かが知っていることを願っています。私が試しているのは、Ruby1.8.7のメソッドのオプションの引数の数を取得することです。Method#arityを返すため、機能しません-n-1。ここで、nはメソッドの必須引数の数です。必要なのはオプションの引数の数ですか?例えば

def foo(a,b,c=4,d=3)
  # ...
end

2つのオプションの引数があることをどのように識別できますか?これはRuby1.8.7であることに注意してください

アップデート

謝罪の質問は明確ではありませんでした。メソッドを呼び出す前に、オプションの引数の数を知る必要があります。例えば

method_def = self.instance_method(:foo)
# check for number of args
# call method if it meets some kind of criteria
4

2 に答える 2

1

次のようにメソッドを定義できます。

def foo(a,b,*p)
  number_of_arguments = p.size

  c = p[0]
  d = p[1]      
end

詳細については、「オプションの引数」を参照してください。

于 2012-09-10T10:53:42.943 に答える
1

私はあなたができるとは思わない。{Proc, Method, UnboundMethod}#parameters実際、それがRuby1.9で導入された理由の1つだと思います。

instance_method(:foo).parameters.count {|type,| type == :opt }
# => 2
于 2012-09-10T11:46:09.693 に答える