Die lokale Ruby-Variable ist nicht definiert
Habe ich den folgenden Ruby-code:
local_var = "Hello"
def hello
puts local_var
end
hello
Bekomme ich die folgende Fehlermeldung:
local_variables.rb:4:in 'hello': undefined local variable or method 'local_var'
for main:Object (NameError) from local_variables.rb:7:in '<main>'
Dachte ich immer, dass lokale Variablen sind nicht von außen zugänglich von der block -, Funktions -, Verschluss, etc.
Aber jetzt habe ich definierte lokale variable in der Datei und versuchen Sie, einen Zugang von der Funktion INNEN die gleiche Datei.
Was ist falsch mit meinem Verständnis?
InformationsquelleAutor der Frage Sergii Shevchyk | 2012-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ruby lokale Variablen, die nur zugänglich in dem Umfang, wie Sie definiert sind. Wenn Sie enter/verlassen Sie eine Klasse, ein Modul oder eine Methode, die Festlegung Ihres Geltungsbereichs änderungen in Ruby.
Zum Beispiel :
Diese betreten und verlassen Punkte als Umfang Tore. Da Sie durch Umfang-Tor über Methode, definition Sie können nicht auf Ihre
local_var
innenhello
Methode.Können Sie Umfang Abflachung Konzept der übergeben variable durch diese Tore.
Beispielsweise statt mit
def
für die Definition Ihrer Methode, die Sie verwenden könnenModule#define_method
.In der gleichen Weise können Sie definieren Sie Ihre Klassen über
Class#New
so dass Ihr Anwendungsbereich nicht ändern, wenn Sie pass-through-Klasse definition.statt
In der gleichen Weise, die Sie verwenden sollten
Module#New
wenn Sie möchten, übergeben Sie Ihre lokalen Variablen durch Modul-Tore.Beispiel stammt aus dem Metaprogramming Ruby
InformationsquelleAutor der Antwort emre nevayeshirazi
local_var
ist eine lokale variable. Lokale Variablen sind lokal auf den Spielraum, den Sie definiert sind. (Das ist, warum Sie sind genannt "lokale Variablen", nachdem alle!) So, offensichtlich, dalocal_var
definiert ist im script-Bereich, können Sie nicht auf es in den Gültigkeitsbereich der Methode.InformationsquelleAutor der Antwort Jörg W Mittag