Aber doch nur IN der Methode. Einen CHANGING-Parameter kann ich außerhalb der Methode vorgeben. DAS meine ich mit "ist nicht vergleichbar". Ich dachte, meine Schirm-Metapher hätte das erklärt.ewx hat geschrieben:Mönsch Jungs, nu macht mal wieder halblang!
Exporting verhält sich wie Changing. Der Meinung bin ich auch, denn ich kann den per "Exporting" angegebenen Parameter ändern:
Code: Alles auswählen.
REPORT zzenno21.
*----------------------------------------------------------------------*
* CLASS l DEFINITION
*----------------------------------------------------------------------*
CLASS l DEFINITION.
PUBLIC SECTION.
CLASS-METHODS x EXPORTING a TYPE c.
ENDCLASS. "l DEFINITION
*----------------------------------------------------------------------*
* CLASS l IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS l IMPLEMENTATION.
METHOD x.
IF a IS INITIAL.
a = '1'.
ELSE.
a = '2'.
ENDIF.
ENDMETHOD. "x
ENDCLASS. "l IMPLEMENTATION
PARAMETERS v1 TYPE c LENGTH 1 DEFAULT space.
PARAMETERS v2 TYPE c LENGTH 1 DEFAULT 'X'.
START-OF-SELECTION.
l=>x( importing a = v1 ). WRITE: / 'V1 =', v1.
l=>x( importing a = v2 ). WRITE: / 'V2 =', v2.
Aber nur wenn du auf "alten" Systemen rumturnst bist zu gewzungen von RETURNING auf EXPORTING umzustellen. Auf "neuen" Systemen können Methoden inwzischen zusätzlich zum Returning-Parameter auch Exporting Parameter haben.ewx hat geschrieben:Grade in dem Fall ist es halt ein nicht zu unterschätzender Stolperstein. Denn wenn ich eine Methode von RETURNING auf EXPORTING ändere, weil z. B. ein zweiter EXPORTING-Parameter dazu kommen muss, dann kann sich das rufende Programm deutlich anders verhalten als vorher.
"Neu" heißt dann in dem Fall vermutlich wieder mal >=7.40, oder?black_adept hat geschrieben:Auf "neuen" Systemen können Methoden inwzischen zusätzlich zum Returning-Parameter auch Exporting Parameter haben.
Eben nicht. Bei Referenzübergabe verhalten sich exporting und changing absolut gleich so weit ich das bisher gesehen habea-dead-trousers hat geschrieben:Ich glaube in diesem Fall bleibt eine per EXPORTING/IMPORTING übergebene Variable unverändert, während bei CHANGING die Variable aber sehrwohl verändert wird.
7.40, SP2larsi hat geschrieben:"Neu" heißt dann in dem Fall vermutlich wieder mal >=7.40, oder?
Ich fürchte, ich muss Dich enttäuschen. In meinem Test habe ich den Baustein bzw. die Methode mit einem RAISE verlassen. Dennoch war die Änderung des "by reference" übergebenen EXPORTING-Parameters auch danach beim Aufrufer sichtbar. Ergo: EXPORTING und CHANGING verhalten sich bei Übergabe per Referenz wohl doch gleicha-dead-trousers hat geschrieben:Ich bin nach wie vor der Meinung, dass CHANGING und EXPORTING nicht gleichzusetzen sind. Bei "per Reference" wird ja nicht der Wert selbst, sondern nur ein Zeiger darauf übergeben. Wie schon festgehalten, wird bei EXPORTING/IMPORTING erst am Ende der Methode der Wert (die Referenz?) tatsächlich an den Aufrufer übergeben. Meine Vermutung ist, dass genau hier der Unterschied liegt weil bei CHANGING die Änderung der Variable explizit erwünscht und jederzeit möglich ist. Theoretisch also auch bei einem Abbruch z.B. bei einer Exception. Ich glaube in diesem Fall bleibt eine per EXPORTING/IMPORTING übergebene Variable unverändert, während bei CHANGING die Variable aber sehrwohl verändert wird.
Bin leider nicht mehr im Büro, werd aber morgen das als erstes mal ausprobieren. Die Hoffnung stirbt zuletzt.
Das ist allerdings übel!larsi hat geschrieben:In meinem Test habe ich den Baustein bzw. die Methode mit einem RAISE verlassen. Dennoch war die Änderung des "by reference" übergebenen EXPORTING-Parameters auch danach beim Aufrufer sichtbar.