2016-09-08 4 views
0

Ruby-CoderubinVariablenNamen Konflikt mit Methodennamen

def something 
    p 'hellp something' 
    'hello' 
end 

p something + 'xx' 
p '-----------' 
something = something + 'xx' 

Der letzte Codelauffehler:

test01.rb:11:in <main>': undefined method +' for nil:NilClass (NoMethodError)

Das ist mein Verständnis des letzten Code ist:

  1. Rubin erklären die Code von links nach rechts.
  2. Ruby-Parser zuerst 'etwas' sehen, dann wird '=' auf der rechten Seite angezeigt. Also, es denkt das 'Etwas' als eine Variable und sein Wert ist Null.
  3. Ruby-Parser wird das zweite 'etwas' sehen, aber ich weiß nicht, dass dies eine Variable oder eine Methode ist. Also, es sucht die gleiche Name Variable oder Methode. Dann findet es den Nullwert "etwas". "nil + 'xx'" Dieser Code wird mit Fehler ausgeführt.

Ich weiß nicht, ob mein Verständnis richtig ist.

+2

Bitte verwenden Sie Englisch für diese Ressource. – Ilya

+0

OK, ich benutze Englisch auf dieser Ressource, danke. –

+1

Ja, das ist mehr oder weniger was passiert. –

Antwort

0

In Ruby ist alles eine Klasse.

Die Zeile, die Ihren Code durcheinander bringt, ist something = something + 'xx' In diesem Moment wird der Compiler alles in der folgenden Reihenfolge verwechseln.

  1. die ersten something wird den nil Wert gegeben (aus der NilClass)
  2. die zweiten something an den rechten Seite der Gleichheitszeichen ist nicht mehr mit dem Verfahren verbunden something zuvor das nil Objekt definiert, aber darauf war definiert in Schritt # 1.
  3. Dann, und das ist, wenn der Fehler ausgelöst wird, versuchen Sie, eine Operation für ein Nil-Objekt auszuführen, das in Ruby nicht zulässig ist.