Wenn eine Variable den Gültigkeitsbereich verlässt, bedeutet, dass es nicht existiert?

StackOverflow https://stackoverflow.com/questions/602991

  •  03-07-2019
  •  | 
  •  

Frage

Ich bin mir nicht sicher, ob ich Umfang verstehen - ist ein Out-of-scope Variable (Ich bin mit Ruby) ist irgendwo im Speicher oder es stoppt vorhandenes (Ich weiß, Sie können nicht darauf zugreifen). Wäre es ungenau zu sagen, dass ein out-of-scope Variable nicht mehr existiert?

Vielleicht ist das eine philosophische Frage.

War es hilfreich?

Lösung

Wenn Sie mit verwalteten Sprache dann nicht wahr und unallocate Speicher zuweisen, um so weit wie Sie besorgt sind, gibt es nicht mehr.

Technisch tut es aber GCs neigt dazu, nicht deterministisch zu sein, so technisch ist es schwer zu sagen, wenn es verschwindet tatsächlich.

Andere Tipps

Eine Variable ist nicht die gleiche wie der Wert gilt.

Die Variable selbst hört auf zu existieren, wenn es den Bereich verlässt. Der Wert , dass die Variable ein Objekt darstellt gehalten werden, und das Objekt weiterhin über die Lebensdauer der Variablen existieren. Der Garbage Collector reklamiert das Objekt später.

Wenn es außerhalb des Gültigkeitsbereichs geht es noch existiert (in dem Sinne, dass es einige Speicher zugeordnet hat) für einige Zeit, bis die Garbage Collection es bereinigt. Aber wie Sie implizieren, es ist verloren seinen Namen und ist nicht erreichbar.

Wenn eine Variable außerhalb des Bereichs fällt, ist jemand um zu hören, es schreit?

Dies ist kein Rubin Frage so viel wie eine allgemeine Frage zu Garbage Collection. In einer Müll gesammelt Sprache wie Ruby oder C #, wenn eine Variable fällt aus Umfang es in irgendeiner Weise gekennzeichnet ist, dass es nicht mehr in Gebrauch sagt. Wenn dies geschieht, Sie nicht es nicht mehr bekommen können und es sitzt um seinen Daumen twiddling -. Aber es hat immer noch ihren zugewiesenen Speicher hat

An einem gewissen Punkt der Garbage Collector aufwachen und sucht Variablen markiert als nicht verwendet wird. Es wird über sie verfügen und an diesem Punkt sind sie nicht mehr im Speicher überhaupt.

Es kann als dies komplizierter sein, je nachdem, wie der Garbage Collector funktioniert, aber es ist nahe genug:)

Es existiert für ein wenig, bis die Garbage Collector es verfügt (wenn das möglich ist).

Rob Kennedy beantwortet diese angemessen, aber ich dachte, ich würde ein wenig mehr Details hinzuzufügen.

Die wichtige Sache zu erkennen, ist der Unterschied zwischen einer Variablen und dem Wert es darstellt.

Hier ist ein Beispiel (in C #, weil ich Rubin nicht kennen):

object c = null;
if (1 == 1) // Just to get a different scope
{
    var newObj = new SomeClass();
    newObj.SomeProperty = true;
    c = newObj;
}

In dem obigen Code, geht NEWOBJ den Gültigkeitsbereich am Ende der if-Anweisung und als solche „nicht existiert“, aber der Wert, dass es mit Bezug auf noch am Leben und gesund, von c verwiesen. Sobald alle Verweise auf das Objekt verschwunden sind, dann wird der Garbage Collector wird es kümmern aufzuräumen.

Wenn Sie sich über Dateiobjekte sprechen, wird es mehr als eine philosophische Frage. Wenn ich mich richtig erinnere, Dateien nicht schließen sich automatisch, wenn sie den Gültigkeitsbereich verlassen - sie nur schließen, wenn man sie schließen fragen, oder wenn Sie einen File.open do |file| Style-Block verwenden, oder wenn sie Müll gesammelt bekommen. Dies kann ein Problem sein, wenn anderer Code (oder Unit-Tests) versuchen, den Inhalt der Datei zu lesen und es ist noch nicht ausgespült worden ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top