51 votes

Indéfinir la variable en Ruby

Disons que j'utilise irb , et tapez a = 5 . Comment puis-je supprimer la définition de a afin que taper a renvoie un NameError ?

Un peu de contexte: plus tard je veux faire ceci:

 context = Proc.new{}.binding
context.eval 'a = 5'
context.eval 'undef a'  # though this doesn't work.
 

54voto

mikej Points 30224

Il existe des méthodes remove_class_variable , remove_instance_variable et remove_const , mais il n'existe actuellement aucun équivalent pour les variables locales.

14voto

Dean Radcliffe Points 694

Vous pouvez toujours "en clair" de la cisr registre de variables locales, en invoquant un cisr shell interne est exécuté. Pensez à comment Bash coquilles de travail à l'égard de désexporter variables d'environnement. Puisque vous dessus décrite mode interactif, cette solution devrait travailler.

En matière de production de code, je ne veux pas annuler la définition des variables locales dans le cadre d'une solution - clé hachages serait probablement préférable pour ce type de scénario.

Voici ce que je veux dire:

$ irb
irb(main):001:0> a = "a"
=> "a"
irb(main):002:0> defined? a
=> "local-variable"
irb(main):003:0> irb # step into subshell with its own locals
irb#1(main):001:0> defined? a
=> nil
irb#1(main):002:0> a
NameError: undefined local variable or method `a' for main:Object
    from /Users/dean/.irbrc:108:in `method_missing'
    from (irb#1):2
irb#1(main):003:0> exit
=> #<IRB::Irb: @context=#<IRB::Context:0x1011b48b8>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x1011b3df0>>
irb(main):004:0> a # now we're back and a exists again
=> "a"

0voto

Nakul Points 1232

Actuellement, vous n'avez aucun moyen de supprimer des variables globales, variables locales et des variables de classe. Vous pouvez supprimer des constantes à l'aide de "remove_const" la méthode bien que

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