Feld symbol-und Daten-Referenz in SAP-ABAP
Wenn wir vergleichen, ABAP feldsymbole und datenreferenzen mit dem Zeiger in C, die wir beobachten :-
In C, sagen deklarieren wir eine variable "var" Typ "integer" mit Standardwert "5".
Die variable "var" gespeichert werden, wo einige im Speicher, und sagen, die Speicher-Adresse, die enthält diese variable ist "1000".
Nun definieren wir einen Zeiger "ptr" und dieser Zeiger zugewiesen wird unsere variable.
So, "ptr" wird "1000" und "*ptr " 5.
Können vergleichen Sie die obige situation in ABAP.
Hier deklarieren wir ein Feld, symbol "FS" und weisen Sie diese der Variablen "var".
Nun meine Frage ist, was "FS" hält ? Ich habe gesucht diesen konsequent im internet aber herausgefunden, dass viele ABAP-Berater sind der Meinung, dass FS enthält die Adresse der Variablen, also 1000. Aber das ist falsch. Beim Debuggen habe ich herausgefunden, dass fs hat nur 5. Also fs (in ABAP) entspricht *ptr (in C). Bitte korrigieren Sie mich, wenn mein Verständnis falsch ist.
Nun deklarieren Sie eine Daten-Referenz "dref" und anderen eingereicht symbol "fsym" und nach dem erstellen der Daten-Referenz, weisen wir die gleichen Feld-symbol . Jetzt können wir das tun, Operationen auf das Feld symbol. Also der Unterschied zwischen Daten refernec und Feld symbol ist :-
im Falle des feldsymbols wir uns zunächst deklarieren Sie eine variable, und weisen Sie es zu einem Feld, symbol.
im Falle von Daten verweisen wir zunächst craete ein Daten-Referenz-und weisen Sie dann das Feld symbol.
Was ist dann die Verwendung der Daten verweisen? Die gleiche Funktionalität können wir erreichen durch die Feld-symbol auch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Feld-symbol ist ähnlich wie ein pointer, aber eine, die Sie nur Zugriff auf die in eine form aufgelöst. In anderen Worten, es wird halten, intern die Speicheradresse der variable, der zugewiesen wurde, um es, aber es wird Ihnen nicht erlauben, um zu sehen, die Speicher-Adresse, nur die Daten, die in der Variablen gespeichert, dass es Punkte zu. Dies kann bewiesen werden, denn wenn Sie ändern Sie den Inhalt von einem Feld-symbol, das auf einer internen Tabelle, die Zeile, die Sie werden sehen, dass die änderungen werden direkt in der Linie.
Einer Daten-Referenz verhält sich wie ein einfacher Zeiger, außer, dass Sie können nicht erhöhen oder verringern Sie die Speicher-Adresse wie in C (ptr++, ptr-- und so). Es unterscheidet sich von einem field-symbol, da können Sie vergleichen zwei Daten, die Verweise zu prüfen, ob Sie auf einen Punkt auf der exakt gleichen Stelle im Speicher. Vergleich von zwei field-symbols wird ein einfacher Wert-Vergleich. Ein weiterer Unterschied ist, dass man Speicher dynamisch anlegen von Referenzen, die mit der CREATE Befehl DATEN. Ein Feld-symbol kann nur zugeordnet werden, um eine bereits zugewiesene variable.
Obwohl Daten Referenzen und Feld-Symbole sind sich sehr ähnlich und sind oft in ähnlicher Weise verwendet (siehe die anderen Antworten), Sie sind grundverschieden.
Daten-Referenzen sind Variablen, die einen Wert hinterlegen, nur wie ein string oder ein integer sein. Sie haben eine Feste Größe im Arbeitsspeicher und einen Inhalt. Der einzige Unterschied ist, dass diese Verweise sind Zeiger auf andere Daten-Objekte, ich. e. der Inhalt hat eine Besondere Bedeutung. Sie zeigen nichts, Sie können aufgelöst werden, übergeben Sie Sie an andere Routinen, die Sie Bearbeiten können Sie entweder die Zeiger (
GET REFERENCE
) oder den Wert, den es Punkte zu. Nichts besonderes an ihm, wirklich - nur Hinweise sind, wie man Sie kennt aus Ihrer Lieblings-Programmiersprache.Feld Symbole sind keine "echten" Variablen. Die Dokumentation besagt, dass
Feldsymbole sind wirklich nur geschickte Manipulationen der lokalen symbol Tabelle der ABAP VM. Ich werde versuchen, das zu verdeutlichen - beachten Sie, dass dies ein stark Vereinfachtes Modell. Angenommen, Sie deklarieren Sie drei Variablen:
Dann die Symboltabelle enthält unter anderem Einträge, die könnte wie folgt Aussehen:
(Ich bin nicht sicher über die tatsächliche Größe einer Referenz-Variablen.)
Diese Einträge nur zeigen Sie auf eine Adresse, die die Werte enthält. Je nach Umfang der Variablen, Sie können sich in völlig verschiedenen Speicherbereiche, aber das ist nicht unsere Sorge im moment. Die wichtigsten Punkte sind:
Fügen wir ein Feld symbol zu diesem:
Dann das symbol kann wie folgt Aussehen:
Bereich symbol wird erstellt, in seinen ursprünglichen Zustand (nicht zugewiesen). Es spielt keine Stelle, und verwenden Sie es in diesem Zustand wird in einem kurz-dump. Der wichtige Punkt ist: Es ist nicht gesichert, indem "heap" - Speicher wie die anderen Variablen. Lassen Sie uns
Wieder das symbol kann wie folgt Aussehen:
Nun, beim Zugriff auf
<my_fs>
das runtime-system erkennt Sie als ein Feld-symbol, Suche die aktuelle Ziel in der symbol-Tabelle und leiten alle Vorgänge, um die tatsächliche Lage desmy_char
. Wenn auf der anderen Seite, würden Sie den Befehldie symbol-Tabelle nicht ändern würde, aber bei der "heap-Adresse" 0x123461, würdest du herausfinden, dass die "Adresse" 0x123457. Nur eine Wertzuweisung wie
my_char = 'X'
odermy_int = 42 * 2
.Dies ist eine sehr vereinfachte version, der Grund, warum Sie können nicht übergeben Sie Feld-Symbole als veränderliche Parameter, und lassen Sie Sie neu zugewiesen werden, innerhalb des Unterprogramms. Sie existieren nicht in der gleichen Weise, dass andere Variablen zu tun, und Sie haben keine Bedeutung außerhalb des Anwendungsbereichs der symbol-Tabelle, die Sie Hinzugefügt wurden.
INITIAL
(Stichwort ABAP), das Feld-symbol kann entwederASSIGNED
oderNOT ASSIGNED
. Vielleicht war es eine schlechte Idee zu nennen, das letztere die erste (natürlich auf Englisch).Ein Feld-symbol, das in der ABAP-viel mehr, ermöglicht Ihnen, zu manipulieren, und übergeben Sie die Werte der Felder zur Laufzeit, ohne zu wissen, die Namen des Feldes Voraus. Betrachten Sie diese Beispiele: Sie haben eine Struktur mit 20 Feldern, können Sie auf jedes Feld name, und weisen Sie Sie an ein Feld-symbol, und ändern Sie dann den Wert ein bestimmtes Feld etc.
Einer Daten-Referenz (
TYPE REF TO DATA
), die eine relativ neuere neben ABAP, können Sie instanziieren, die Daten zur Laufzeit ohne Kenntnis der Typ zuvor mit dem "CREATE DATA" - Anweisung.Ein Beispiel für die Verwendung von
CREATE DATA
finden Sie in den folgenden SAP-Hilfe Seite. Es zeigt Ihnen, wie Sie zum Beispiel einen Verweis auf ein Bezugsobjekt (D. H. ABAP Objects-Referenz) mitCREATE DATA
, das ist etwas, was Sie nicht tun konnte, mit einem Feld symbol: http://help.sap.com/abapdocu_70/en/ABAPCREATE_DATA_REFERENCE.htmEinem Feld symbol ist - nomen est omen - ein symbol für ein Feld. Sie es einer Variablen zuweisen und es wird ein alias für die variable.
Der wesentliche Unterschied zwischen einer Referenz und einem Feld symbol ist ein Verweis auf anonyme Daten, die durch ERSTELLEN einer DATEN-oder OBJEKT ERSTELLEN. Feld-Symbole müssen immer zugeordnet werden, um eine vorhandene variable.