Метод Ruby с максимальным количеством параметров
У меня есть метод, который должен принимать максимум 2 аргумента. Его код выглядит так:
def method (*args)
if args.length < 3 then
puts args.collect
else
puts "Enter correct number of arguments"
end
end
Есть ли более элегантный способ его указать?
Ответы
Ответ 1
У вас есть несколько альтернатив, в зависимости от того, насколько вы хотите, чтобы этот метод был подробным и строгим.
# 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
Ответ 2
если максимум - два аргумента, зачем вообще использовать оператор splat? Просто будь явным. (если не существует другого ограничения, о котором вы нам не говорили.)
def foo(arg1, arg2)
# ...
end
Или...
def foo(arg1, arg2=some_default)
# ...
end
Или даже...
def foo(arg1=some_default, arg2=some_other_default)
# ...
end
Ответ 3
Повысьте ошибку лучше. Если аргументы неправильны, это серьезная проблема, которая не должна проходить в вашем случае с скромным puts
.
def method (*args)
raise ArgumentError.new("Enter correct number of arguments") unless args.length < 3
puts args.collect
end