web-dev-qa-db-ja.com

Ruby最大パラメーター数のメソッド

最大2つの引数を受け入れるメソッドがあります。そのコードは次のとおりです。

def method (*args)
  if args.length < 3 then
    puts args.collect
  else
    puts "Enter correct number of  arguments"
  end
end

それを指定するよりエレガントな方法はありますか?

31
Nikita Barsukov

メソッドをどの程度冗長かつ厳密にしたいかに応じて、いくつかの選択肢があります。

# force max 2 args
def foo(*args)
  raise ArgumentError, "Too many arguments" if args.length > 2
end

# silently ignore other args
def foo(*args)
  one, two = *args
  # use local vars one and two
end

# let the interpreter do its job
def foo(one, two)
end

# let the interpreter do its job
# with defaults
def foo(one, two = "default")
end
72
Simone Carletti

最大値が2つの引数である場合、なぜそのようなsplat演算子を使用するのですか?明示するだけです。 (まだ説明していない他の制約がない限り。)

def foo(arg1, arg2)
  # ...
end

または...

def foo(arg1, arg2=some_default)
  # ...
end

あるいは...

def foo(arg1=some_default, arg2=some_other_default)
  # ...
end
12
Ed S.

エラーを改善します。引数が正しくない場合、これは深刻な問題であり、謙虚なputsで渡すべきではありません。

def method (*args)
  raise ArgumentError.new("Enter correct number of  arguments") unless args.length < 3
  puts args.collect
end
5
fifigyuri