Unterschied zwischen verschiedenen Variablen Bereichen in ruby
Ruby hat 5 variable scopes:
- Lokale Variablen: dies sind die normalen Variablen, Beispiel
x = 25
,y = gaurish
wox
undy
sind lokale Variablen. - Instanz-Variablen: diese sind gekennzeichnet mit
@
symbol vor dem eigentlichen Variablennamen. hauptsächlich mit dem Unterricht, so dass jede Instanz/Objekt der Klasse hat einen anderen/separaten Wert. Beispiel.@employee.name = 'Alex'
- Klasse Variablen: gekennzeichnet mit
@@
Symbol vor der Variablen name. Klasse variable, denke ich, haben den gleichen Wert accos alle Instanzen/Objekt. - Globale Variablen: Sie beginnen mit
$
symbol und zugänglich sind überall. Beispiel$LOAD_PATH
- Konstanten: Muss beginnen mit Großbuchstaben, aber per Konvention ist geschrieben in
ALL_CAPS
. obwohl, es ist eine Konstante, aber seinen Wert, seine nicht konstant und verändert werden kann(ruby wirft eine Warnung, obwohl). so in dem Sinne, das wirkt auch wie eine variable.
Wie Sie sehen können,alle der oben genannten Variablen speichern einen Wert eines Typs und deren Wert kann geändert werden. Aber, für jeden Bereich etwas tut, etwas anders. Mit 5 verschiedenen Arten von Variablen-scopes ist verwirrt die Hölle aus mir heraus. Vor allem, ich habe Schwierigkeiten, zu entscheiden, unter welchen Fall sollte ich einen bestimmten Bereich in meinem code. also ich habe einige Fragen in meinem Kopf. bitte um Antwort:
- Ich feststellen, dass lokale Variablen und Klassenvariablen bleiben gleich für alle Objekte/Instanzen, im Gegensatz zu Instanz-Variablen. also was ist der Unterschied zwischen Lokalen Variablen und Klassenvariablen?
- Können lokale Variablen verwendet werden, statt der class-Variablen? oder vice-versa. Und wenn ja, dann warum, und wenn Nein, warum nicht?
- Globale Variablen in ruby erinnert mich an die böse
global $x
Variablen in PHP. Sind Globale Variablen in ruby auch als böse und sollte daher nicht verwendet werden. ODER gibt es bestimmte Fälle in denen es Sinn macht die Verwendung von globalen Variablen in ruby? - Warum die Konstanten sind nicht-Konstanten und damit Ihre Wert, der geändert werden? Eine Konstante, die den Wert per definition konstant sein sollte richtig? sonst können wir nur verwenden Sie eine andere variable und nicht deren Wert ändern. wäre das äquivalent zu einer KONSTANTEN in ruby?
- Jede Seite/Ressource/link, der erklärt den Unterschied zwischen 5 verschiedene variable Bereiche in ruby? Ich wie immer einen griffbereit.
- Unter welchen use-case, ich sollte mit einem bestimmten Geltungsbereich von Variablen in meinem code. so würde man erklären, alle 5 Fälle mit können Beispiel, das wäre cool, das ist mein Hauptgrund für die Verwirrung.
- gibt es eine de-facto-Wahl, wie
public
in java? Das wäre das sichere Wette in die meisten use-cases?
Dank für Ihre Zeit zu Lesen und Frage beantworten
Für Punkt eins, alle Objekte teilen sich Klassen-Niveau-Variablen, jedes einzelne Objekt hat seine eigene Kopie der lokalen Variablen
Wenn jedes einzelne Objekt hat seine eigene Kopie der lokalen Variablen, nicht lokale Variablen, die mehr wie Instanz-Variablen dann?
Naja, ich nehme an, man könnte alles sehen. Instanz-Variablen gehören eine Instanz eines Objekts und der Regel make-up Eigenschaften des Objekts. Zum Beispiel ein
Wenn jedes einzelne Objekt hat seine eigene Kopie der lokalen Variablen, nicht lokale Variablen, die mehr wie Instanz-Variablen dann?
Naja, ich nehme an, man könnte alles sehen. Instanz-Variablen gehören eine Instanz eines Objekts und der Regel make-up Eigenschaften des Objekts. Zum Beispiel ein
Person
Objekt vielleicht die beiden Instanz-Variablen @first_name
und @last_name
könnte es auch eine lokale variable x
aber x
ist unabhängig von dem Zustand der Person
ObjektInformationsquelleAutor CuriousMind | 2012-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klasse Variablen sind die gleichen für alle Instanzen, weil Sie in der Klasse Variablen, die der Klasse zugeordnet. Alles, was den Zugriff auf die gleichen Variablen, einschließlich jeder Instanz.
Nicht. Lokale Variablen sind nur, dass–lokale. Sie können lokal zu einer Funktion oder lokal auf dem Klasse Erklärung, die verschiedenen als eine Klassenvariable. Einheimische, die in der Deklaration einer Klasse außerhalb des Bereichs, wenn die Klassendeklaration endet.
Dass ist, weil Sie genau das gleiche–Sie sind global. Global state ist immer böse; dies ist keine Eigenschaft der Sprache oder der Umwelt. Das heißt, einige globalen Zustands verlangt werden kann–das ist einfach so wie es ist. Macht es Sinn, Globale Zustand, wenn es die globalen Zustand. Der trick ist die Verwendung von globalen Zustand richtig, das ist manchmal ein nicht-triviales Unterfangen.
Ist das, wie Ruby ist.
Einer wurde schon von Chris.
Ich würde denke diese Frage wäre weitgehend selbst beantworten. Global, wenn die ganze Welt zugreifen muss. Instanz, wenn es zu einer bestimmten Instanz der Klasse. Vor Ort, wenn es nur in einem lokalen Bereich (z.B., eine Methode, die einen block (beachten Sie Unterschiede zwischen 1.8 und 1.9 mit Bezug auf block scope), etc.) Konstant, wenn die variable soll nicht zu ändern. Eine Klasse variable, wenn es etwas ist, dass entweder jede Instanz braucht, oder wenn die Exposition über eine Klasse, Methode, etwas fest einer Klasse zugeordnet.
Es gibt keine "die meisten Einsatz-Fälle", die es ganz darauf an, was man mit der variable. Und
public
ist nicht die de-facto-Wahl in Java–es hängt von der Person in Frage. Standard-Java-Bereich ist package-private (Methoden, Eigenschaften). Die Verwendung in Ruby, hängt vom Anwendungsfall, der Feststellung, dass wie bei Java, und noch besser in Ruby, Dinge, die umgangen werden kann.InformationsquelleAutor Dave Newton
Lokale Variablen sind nicht äquivalent zu Klasse-Sie sind gebunden an den block, den Sie sind in. Jede lokale Deklaration in einem block verwendet werden kann es. Klasse Variablen sind gebunden an die Klasse Struktur, die Sie sind in. Die Definition einer Klasse ist, selbst einen block, so dass Sie möglicherweise in der Lage sein, um Zugriff auf lokale Variablen ähnlich, aber Sie werden finden, wenn Sie finden Sie Ihre Klasse in einem anderen Kontext können Sie nicht beziehen sich auf die lokale variable in der gleichen Art und Weise.
Globale Variablen sind schlecht angesehen, wenn Sie missbraucht werden. OOP soll Ihnen helfen, die Struktur Ihrer Programme, so dass Konstanten auf das gesamte Programm nicht benötigt werden. Denken von Ihnen als tatsächlich global: wenn Sie können keine Garantie für die Konsistenz der gesamten Welt, wie der Wert von PI oder, ob oder nicht Sie lieben Ihre Frau, Sie wahrscheinlich sollte nicht sein Versprechen.
Sobald Sie den Dreh von Ihnen, ich finde "Ruby Geltungsbereich Von Variablen" zu sein, eine gute Referenz.
InformationsquelleAutor Chris Keele
Fand ich eine gute und ausführliche Erklärung hinsichtlich der unterschiedlichen Bereiche und deren Sichtbarkeit in Ruby in den folgenden link .Gültigkeitsbereiche und Sichtbarkeiten mit Beispielen im detail.
Laut ,
Etwas mehr Erklärung bezüglich der Instanz-Variablen ist : Sie können den Zugriff auf Instanz-Variablen in jeder Methode der jeweiligen Klasse. Während die lokalen Variablen kann nicht zugegriffen werden, die außerhalb der Methode. Unten ist ein Beispiel von ruby Mönch, das erklärt dieses Konzept gründlich.
Hier Lieferanten ist eine lokale variable, die zugegriffen werden kann von der show-Methode nur in unserem Beispiel.Nur versuchen zu erklären, dass die Lieferanten-variable in der initialize-Methode und drucken Sie es aus in der show-Methode. Es gibt einen Fehler undefined variable Lieferanten.
ich hoffe, es hilft. 🙂
InformationsquelleAutor huzefa biyawarwala
Hier ist meine zwei Cent für das, und ist das schreiben für c++/java/c# - Programmierer:
Ruby local/$Global-variable ist ein bisschen wie bei c++/java/c#'s lokalen/Globalen Variablen.
Ruby @Instanzvariable es ist wie c++/java/c#'s member-variable /class-Eigenschaft, die zugänglich sein können, in jedem member-Funktion/Methode der Klasse.Obwohl Ruby-Instanz angewendet werden kann, nicht nur auf Klasse, sondern auch um die Ruby-Modul.
Ruby @@Klassenvariable ist wie, als c++/java die statische member-variable, die Freigabe zwischen allen Instanzen der gleichen Klasse.
InformationsquelleAutor Gob00st