Niveau de la pile trop profond dans Ruby
class MyClass
def method_missing(name, *args)
name = name.to_s
10.times do
number = rand(100)
end
puts "#{number} and #{name}"
end
end
Bonjour, je suis à l'exercice de ruby, mais dans ce non récursives fonction que j'obtiens au niveau de la pile trop profonde erreur lors de l'utilisation de ce morceau de code.
x = MyClass.New
x.try
Vous devez vous connecter pour publier un commentaire.
Le problème avec votre code est le
number
variable définie à l'intérieur d'times()
tombe demethod_missing()
portée. Ainsi, lorsque cette ligne est exécutée Ruby interprète comme un appel de méthode surself
.Dans les autres cas, vous devez obtenir de l'
NoMethodError
exception. Cependant, puisque vous avez remplacémethod_missing()
méthode pourMyClass
, vous n'obtenez pas cette exception. Au lieu de cela jusqu'à ce que les débordements de pile méthodenumber(
) est appelée.Pour éviter de tels problèmes,essayez de spécifier les noms de méthode qui sont autorisés. Par exemple, disons que vous avez seulement besoin
try, test, and my_method
méthodes à appeler surMyClass
, puis spécifiez ces noms de méthode surmethod_missing()
pour éviter de tels problèmes.Comme un exemple :
Si vous n'avez pas vraiment besoin
method_missing()
, éviter de l'utiliser. Il y a quelques bonnes alternatives à ici.puts "#{number} and #{name}"
était censé être à l'intérieur de la10.times
mais peut-être pas.number = Array.new(10){ rand(100) }.reduce(:+)