60 votes

Que signifie "mauvais nombre d'arguments (1 pour 0)" en Ruby ?

Que signifie "Argument Error : wrong number of arguments (1 for 0)" ?

92voto

bennett_an Points 848

Lorsque vous définissez une fonction, vous définissez également les informations (arguments) dont cette fonction a besoin pour fonctionner. Si elle est conçue pour fonctionner sans aucune information supplémentaire et que vous lui en passez, vous obtiendrez cette erreur.

Exemple : Ne prend aucun argument :

def dog
end

Accepte les arguments :

def cat(name)
end

Lorsque vous les appelez, vous devez les appeler avec les arguments que vous avez définis.

dog                  #works fine
cat("Fluffy")        #works fine

dog("Fido")          #Returns ArgumentError (1 for 0)
cat                  #Returns ArgumentError (0 for 1)

Consultez le Koans de Rubis pour apprendre tout ça.

1 votes

-1 Cat.new("Fluffy") ne fonctionne pas bien. Il donne "uninitialized constant Cat", et Cat().new("Fluffy") donne "ArgumentError : wrong number of arguments (0 for 1)".

7 votes

Il s'agit plutôt d'une représentation visuelle simple pour expliquer ce qu'est une erreur d'argument. But if you are that concerned, please fix it. <br>Les autres réponses ont pu être plus valables techniquement, mais probablement pas aussi utiles pour quelqu'un qui demande quelque chose d'aussi élémentaire que "qu'est-ce qu'une ArgumentError ?".

0 votes

@bennett_an Merci d'avoir fourni un lien vers Ruby Koans, cela semble très intéressant.

11voto

icktoofay Points 60218

Vous avez passé un argument à une fonction qui n'en prenait pas. Par exemple :

def takes_no_arguments
end

takes_no_arguments 1
# ArgumentError: wrong number of arguments (1 for 0)

2voto

Howard Points 23487

Je suppose que vous avez appelé une fonction avec un argument qui a été défini sans en prendre.

def f()
  puts "hello world"
end

f(1)   # <= wrong number of arguments (1 for 0)

0voto

justingordon Points 1646

Si vous passez de l'utilisation d'un lambda à un argument à une fonction à un argument, vous obtiendrez cette erreur.

Par exemple :

Tu avais :

foobar = lambda do |baz|
  puts baz
end

et vous avez changé la définition en

def foobar(baz)
  puts baz
end

Et vous avez laissé votre invocation comme :

foobar.call(baz)

Et puis vous avez reçu le message

ArgumentError: wrong number of arguments (0 for 1)

alors que vous vouliez vraiment :

foobar(baz)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X