2

通常、名前付き引数で呼び出されるメソッドがあり、次のようになります

def foo(x = nil, y = nil)
  fail ArgumentError, "x must be present" unless x
  fail ArgumentError, "y must be present" unless y
  # do stuff with x and y
end

のように書き換えたい

def foo(x = nil, y = nil)
  required_arguments :x, :y
  # do stuff with x and y
end

また

class Foo
  required_arguments :bar, :x, :y

  def bar(x = nil, y = nil)
  end
end

2番目のアプローチを実装しようとしましalias_method_chainたが、問題は__method__ユーティリティモジュールのコンテキストで評価されるため、確認する必要があるメソッドのパラメーターにアクセスできないことです。何か案は?

4

2 に答える 2

3

Ruby 2.0 を使用している場合は、キーワード引数を使用できます。

def foo(x: (fail ArgumentError), y: (fail ArgumentError))
  # do stuff with x and y
end

Ruby 2.1 では、適切な必須引数があります。

def foo(x:, y:)
  # do stuff with x and y
end

このようにして、実際には名前付きパラメーターがあります(質問で名前付きパラメーターと呼びましたが、それは少し混乱します)。したがって、次のようにメソッドを呼び出す必要があります。

foo(x: 1, y: 2)
于 2013-11-01T08:03:53.530 に答える