Lorsque vous développez et du débogage, je souhaite parfois que je puisse écrire un 1-liner qui a vidé les noms, types et valeurs d'un tas de variables. Le problème est que je ne sais pas comment accéder au nom d'une variable, si je peux du tout.
Voici une première tentative: p> je Comme la sortie de ce programme est quelque chose comme: p> Je ne sais pas ce que ??? code> devrait être ci-dessus. Peut-il être fait? P> p>
4 Réponses :
foo = 1
bar = "42"
baz = Hash.new
%w(foo bar baz).each do |vn|
v = eval(vn)
puts "#{vn} = (#{v.class}) #{v}"
end
But this, of course, doesn't help you if you want a method with 1 argument.
Je viens de trouver une solution très cool pour cela:
Non, car pour obtenir le nom d'une variable d'instance particulière, boucle via tout des variables d'instance jusqu'à ce que vous en trouviez une avec une valeur correspondant à votre variable d'instance. p> p> foo code> / bar code> / baz code> ne sont pas des variables d'instance dans votre code. Ce sont des variables locales (les variables d'instance commencent par un @ code>). Il y a un moyen de le faire avec des variables d'instance et de la méthode code> instance_variables code>, bien que:
Voici un peu de code de débogage que j'utilise partout (je le collez dans un fichier séparé afin qu'il puisse être nécessaire partout où le nécessaire). Il peut être utilisé de deux manières. A passé une ou plusieurs valeurs, cela les inspecte simplement et écrit le résultat à $ stardr. Mais passa un bloc qui retourne une ou plusieurs choses, il les écrit avec leurs noms em>. Remarque: le
q code > Fonction, et plus, est maintenant disponible dans Cute_Print GEM. P> P>
foo = 1
bar = "42"
baz = Hash.new
Varspec = Struct.new(:name, :type, :value, :inspect_str) do
def to_s
"#{name} = (#{type}) #{inspect_str}"
end
end
lvars = local_variables.map {|lvar|
lvar = lvar.to_s
val = eval(lvar)
val = val.dup rescue val
Varspec.new(lvar, val.class, val, val.inspect)
}
puts lvars
# baz = (Hash) {}
# bar = (String) "42"
# foo = (Fixnum) 1
Or, you could just use a debugger. That's what they were invented for, after all.
Pourriez-vous inverser votre logique et aller avec la solution de Glenn: Stackoverflow. com / Questions / 58482 / Ruby-Get-A-Variables-Nom Ma compréhension est que vous ne pouvez pas obtenir le nom de la variable.
@Pat: Ceci est en effet la même chose que la solution de Leventix, mais avec une syntaxe différente. Donc, je suppose que la réponse est oui. :)
Je ne sais pas si l'exemple peut gérer plusieurs variables, mais l'exemple vous permet d'appeler
show (variable) code> vous donne le nom de la variable et sa valeur. Github.com/quackingDuck/exemplor