Se eseguo questo codice ruby:Rubino: metodo inspiegabilmente sovrascritti e impostare a zero
def foo
100
end
p defined?(foo), foo
if false
foo = 200
end
p defined?(foo), foo
L'output che ottengo è:
"method"
100
"local-variable"
nil
Qualcuno può spiegarmi perché foo
è impostato su nil
dopo non aver eseguito l'if? Questo comportamento atteso o un bug rubino?
Il metodo non viene sovrascritto e impostato a zero. 'puts foo()' funziona ancora. Quello che succede è che una variabile locale 'pippo' è entrata in esistenza. Ci dispiace, ma non posso rispondere perché questo accade. – Mischa
Anche io non so rispondere perché. Ma se c'è sempre un'ambiguità tra variabili e metodi locali, assicurarsi di utilizzare 'self.foo' per il metodo, e' foo' per la variabile. –
@sawa - non voglio far ritirare di nuovo, ma non capisco il tuo commento e non capisco il motivo per cui è stata modificata la domanda di bmesuere. Non c'è niente di sbagliato nella domanda. Non vedo la necessità di modificarlo. – Mischa