web-dev-qa-db-fra.com

Ruby méthode avec nombre maximum de paramètres

J'ai une méthode qui devrait accepter au maximum 2 arguments. Son code est comme ceci:

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

Existe-t-il une manière plus élégante de le spécifier?

31
Nikita Barsukov

Vous avez plusieurs alternatives, selon le degré auquel vous voulez que la méthode soit détaillée et stricte.

# 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

si le maximum est de deux arguments, pourquoi utiliser l'opérateur splat comme ça? Soyez explicite. (sauf s'il existe une autre contrainte dont vous ne nous avez pas parlé.)

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

Ou...

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

Ou même...

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

Générez mieux une erreur. Si les arguments ne sont pas corrects, c'est un problème grave, qui ne devrait pas passer dans votre avec un humble puts.

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