autovivification

___ answer35045133 ___

Nach einigen Nachforschungen und Nachfragen habe ich festgestellt, dass dies mit der Tatsache zu tun hat, dass %code% an eine Subroutine übergeben wurde, nicht die Tatsache, dass es %code% war. Zum Beispiel,

%Vor%

Dies wird auch autovivify; Dies liegt daran, dass intern perl in der Lage sein muss, einen Alias ​​für Funktionsargumente zu setzen.

Innerhalb von %code% haben wir einen Alias-Satz %code% Aber das bedeutet %code% muss lvalwertfähig sein, da Unterprogramme in Perl davon ausgehen, dass Sie etwas wie %code% tun können, damit die Autovivifikation erfolgen muss.

    
___ qstntxt ___

Das ist eine Feinheit, die ich mit %code% gefunden habe.

%Vor%

Ich bin höchst verwundert darüber, warum das erste Snippet keinen Dereferenzierungsfehler ergeben würde. Wenn ich %code% verwende, wird klar, dass im ersten Ausschnitt %code% autoviviert wird, um %code% zu sein.

Warum muss %code% autovivifizieren? Ich habe versucht, die %code% dafür zu lesen, konnte keine befriedigende Antwort finden. %code% legt keinen Alias ​​fest ( %code% , etc), also muss Perl nicht denken, dass %code% im Lvalue-Kontext sein muss, oder? (Ich verstehe, wenn der Ausdruck in lvalue Kontext Autovivification sein muss passiert wie hier .

Ein relevanter Beitrag .

    
___ tag123hash ___ Eine Hash-Funktion ist eine wohldefinierte Prozedur oder mathematische Funktion, die eine große Datenmenge in ein kleines Datum umwandelt, normalerweise eine ganze Zahl. Bei Fragen zum Twitter- und Facebook-Symbol verwenden Sie den Hashtag. Verwenden Sie bei Fragen zu URLs und HTML-Ankern die Fragment-ID. Bei Fragen zu Rubys Hash-Typ verwenden Sie Ruby-Hash. ___ qstnhdr ___ Warum erfolgt die Autovivifizierung mit keys () und nicht mit% {..}? ___ tag123key ___ Ein eindeutiger Bezeichner zum Abrufen eines gepaarten Werts. Wird in Hashtabellen und Datenbanken verwendet. ___ tag123autovification ___ Autovivification bedeutet implizit das Erstellen von Datenstrukturen, auf die bei der expliziten Erstellung ihrer Daten über den Namen zugegriffen wird, z. B. das Initialisieren eines Hash beim Zuweisen des ersten Schlüssel / Wert-Paars oder das Erstellen eines Ordners beim Speichern einer Datei in einem neuen Pfad. ___ tag123dereference ___ Alles im Zusammenhang mit der Zeiger-Dereferenzierung, d. h. dem Prozess zum Bestimmen des Objekts, auf das der Zeiger verweist. Sprachen mit Zeigervariablen haben normalerweise einen speziellen Operator, um die Dereferenzierung von Zeigern durchzuführen (z.B. in C und C ++, wenn 'p' ein gültiger Zeiger ist, ist 'p' das Objekt, auf das mit 'p' gezeigt wird). ___ answer35031218 ___

Beachten Sie, dass Schlüssel in der Tat ein lvalue sein können (indem Sie die erwartete Anzahl von Elementen für den Hash festlegen).

Aber selbst wenn Schlüssel selbst nicht in einem Lvalue-Kontext verwendet werden, hat dies den Nebeneffekt, dass der Iterator eines Hashes zurückgesetzt wird.

Es ändert also den Hash und gibt der Dereferenz einen Lvalue-Kontext, der sie autovivifizieren lässt.

    
___ tag123perl ___ Perl ist eine prozedurale, allgemeine Programmiersprache für allgemeine Zwecke, die für ihre native Unterstützung von regulären Ausdrücken und String-Parsing-Funktionen bekannt ist. Bitte verwenden Sie diesen Tag für Fragen zu Perl im Allgemeinen. Für Dinge, die mit der neuen (aber verwandten) Sprache "Perl 6" zu tun haben, verwenden Sie bitte das perl6-Tag. Verwenden Sie für reguläre Ausdrücke nach Perl-Art in anderen Sprachen das Regex-Tag oder, falls sie auf der PCRE-Bibliothek basieren, das PCRE-Tag. ___
3
Antworten

PHP-Autovivifizierung

Update: Meine ursprüngliche Absicht für diese Frage war festzustellen, ob PHP diese Funktion tatsächlich besitzt. Dies wurde in den Antworten auf das Skalarproblem verloren. Bitte sehen Sie stattdessen diese neue Frage: "Hat PHP Autovivificati...
11.05.2011, 09:50
2
Antworten

Warum erfolgt die Autovivifizierung mit keys () und nicht mit% {..}?

Das ist eine Feinheit, die ich mit keys() gefunden habe. %Vor% Ich bin höchst verwundert darüber, warum das erste Snippet keinen Dereferenzierungsfehler ergeben würde. Wenn ich Data::Dumper verwende, wird klar, dass im ersten Ausschnit...
27.01.2016, 04:45