Ich möchte den Umfang von Variablen mit ziemlich einfachem Code erklären.
Es wird angenommen, dass die folgende Steuerung beschrieben wird.
class SampleController < ApplicationController
def test1
sample_1 = 10
test3(sample_1)
end
def test2
sample_2 = 10
test4
end
private
def test3(num)
sample_3 = num + 10
end
def test4
sample_4 = sample_2 + 10
end
end
Anscheinend ruft die Aktion test1 die Aktion test3 (num) der privaten Methode auf, und die Aktion test2 ruft die Aktion test4 der privaten Methode auf.
Wenn ich zuerst aus der Schlussfolgerung schreibe, funktioniert der Aufruf und die Verarbeitung von test3 (num) von test1 gut, aber ich kann test4 von test2 aufrufen, aber die Verarbeitung funktioniert nicht und es tritt ein Fehler auf.
In Test1 wird "sample_1 = 10" intern definiert und als tatsächliches Argument in der Notation "test3 (sample_1)" an test3 (num) übergeben.
def test1
sample_1 = 10
test3(sample_1)
end
In test3 wird das übergebene sample_1 dem formalen Argument num zugewiesen. Mit anderen Worten, wenn Sie es leicht verständlich schreiben (?), Bedeutet es "num = 10".
def test3(num)
sample_3 = num + 10
end
Auf diese Weise wurde die Nummer erfolgreich an num übergeben, sodass die Berechnung des Inhalts von test3 (num) tatsächlich "sample_3 = 10 + 10" ist Dann ist "sample_3 = 20".
In Test2 wird test4 aufgerufen, nachdem intern "sample_2 = 10" definiert wurde.
def test2
sample_2 = 10
test4
end
In test4 kann "sample_2 = 10" verwendet werden, das in test2 definiert ist, sodass die Berechnung des Inhalts praktisch ist. Da "sample_4 = 10 + 10" ist, ist es nicht "sample_4 = 20".
Warum?
def test4
sample_4 = sample_2 + 10
end
Dies liegt daran, dass sample_2 nicht in test4 verwendet werden kann.
Egal wie viel Sie in test2 sample_2 = 10
definieren, es hat nichts mit test4 zu tun.
Dies wird als Gültigkeitsbereich von Variablen bezeichnet. Wenn Sie zuerst aus der Schlussfolgerung schreiben, die Variablen, die in test4 verwendet werden können
Das ist. (Um genau zu sein, ich denke, ich hätte eine globale Variable verwenden können, aber es ist kompliziert, also werde ich es weglassen.)
Hmm? Instanzvariable? Das ist der mit @.
Wenn Sie also in sample4 sample_2 = 10
verwenden möchten
def test2
@sample_2 = 10
test4
end
Definieren Sie es auch in test4 so
def test4
sample_4 = @sample_2 + 10
end
Sie können es verwenden, indem Sie @ hinzufügen und es so aufrufen, und es wird sicher sample_4 = 20
sein.
Recommended Posts