Рубиновый метод с максимальным количеством параметров - PullRequest
31 голосов
/ 11 февраля 2011

У меня есть метод, который должен принимать максимум 2 аргумента.Его код выглядит так:

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

Есть ли более элегантный способ указать его?

Ответы [ 3 ]

72 голосов
/ 11 февраля 2011

У вас есть несколько вариантов, в зависимости от того, насколько вы хотите, чтобы метод был подробным и строгим.

# 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
12 голосов
/ 11 февраля 2011

если максимум два аргумента, зачем вообще использовать такой оператор splat? Просто будьте явными. (если нет каких-то других ограничений, о которых вы нам не сказали.)

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

Или ...

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

Или даже ...

def foo(arg1=some_default, arg2=some_other_default)
  # ...
end
5 голосов
/ 11 февраля 2011

Поднимите ошибку лучше.Если аргументы не верны, это серьезная проблема, которая не должна переходить с вашей скромной puts.

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