Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Basti* am 04.06.13 - 13:19:10
-
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.
function tuwas(dings as String)
dim result as String
result = strright(dings,"#")
tuwas=result
end function
Aufgerufen wird das ganze per
Dim teststring as String
Dim neustring as String
teststring = "Hallo Welt#Hello World"
neustring = tuwas(teststring)
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
-
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.
-
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?
-
Nein, eine Zuweisung erstellt immer eine Kopie...
-
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".
...
Du musst das Script, das die geänderte Function aufruft, neu übersetzen (Script ändern (z.B. Leerzeichen rein raus) und Designelement speichern).
-
Ok danke!! Jetzt geht es! :)