Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Basti* am 04.06.13 - 13:19:10

Titel: Wie String kopieren? (=> call by value)
Beitrag 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.

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

   tuwas=result
end function

Aufgerufen wird das ganze per

Zitat
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
Titel: Re: Wie String kopieren? (=> call by value)
Beitrag von: Peter Klett am 04.06.13 - 13:39:02
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.
Titel: Re: Wie String kopieren? (=> call by value)
Beitrag 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".

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?

Titel: Re: Wie String kopieren? (=> call by value)
Beitrag von: Tode am 04.06.13 - 13:57:35
Nein, eine Zuweisung erstellt immer eine Kopie...
Titel: Re: Wie String kopieren? (=> call by value)
Beitrag von: Peter Klett am 04.06.13 - 14:05:37
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).
Titel: Re: Wie String kopieren? (=> call by value)
Beitrag von: Basti* am 04.06.13 - 14:42:09
Ok danke!! Jetzt geht es! :)