Domino 9 und frühere Versionen > ND7: Entwicklung

Wie String kopieren? (=> call by value)

(1/2) > >>

Basti*:
Hallo miteinander!

Wie kann ich einer Function einen Wert statt einer Referenz übergeben? (Call by Value statt call by Reference).

Ich hab eine Funktion, der ich einen String übergebe, diesen im Inneren verändere und dann den neuen Wert zurückliefere.


--- Zitat ---function tuwas(dings as String)
    dim result as String
    result = strright(dings,"#")

   tuwas=result
end function

--- Ende Zitat ---

Aufgerufen wird das ganze per


--- Zitat ---Dim teststring as String
Dim neustring as String

teststring = "Hallo Welt#Hello World"
neustring = tuwas(teststring)

--- Ende Zitat ---

Soweit so gut! Problem: wenn ich im Hauptprogramm den teststring noch in seiner ursprünglichen Form brauche, dann ist auch der verändert! => LS scheint per Reference die Variablen zu übergeben.

Hat jemand einen Tipp?
Grüße
Basti

Peter Klett:
Klassisch geht das mit ByVal

Function TuWas (ByVal s As String) As String
   s = ""
   ...
End Function

Alternativ kannst Du auch einfach die Variable in Ruhe lassen (so mache ich persönlich das, aber Geschmacksache)

Function TuWas (s As String) As String
   Dim mein_s As String
   mein_s = s
   'Verbiege mein_s
   ...
End Function


Gleiches gilt natürlich auf für Subs.

Ich finde es gut, dass nur die Referenzen zurückgegeben werden, denn so kann man mit einer Function oder Sub bei Bedarf mehrere Variablen gleichzeitig ändern.

Basti*:
Vielen Dank für den Tip! :) ByVal hab ich gleich mal ausprobiert. Kann es sein, dass man die Funktion dann speziel aufrufen muß? Bei mir kommt jetzt immer ein "Type mismatch on external name: tuwas".

Die Variable "in Ruhe lassen" hatte ich zu erst auch probiert, aber das hat bei mir nix geholfen. Wird bei einer einfache Zuweisung (a = b) nicht auch nur die Referenz übergeben?

Tode:
Nein, eine Zuweisung erstellt immer eine Kopie...

Peter Klett:

--- Zitat von: Basti* am 04.06.13 - 13:50:46 ---Vielen Dank für den Tip! :) ByVal hab ich gleich mal ausprobiert. Kann es sein, dass man die Funktion dann speziel aufrufen muß? Bei mir kommt jetzt immer ein "Type mismatch on external name: tuwas".
...
--- Ende Zitat ---
Du musst das Script, das die geänderte Function aufruft, neu übersetzen (Script ändern (z.B. Leerzeichen rein raus) und Designelement speichern).

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln