Autor Thema: Wie String kopieren? (=> call by value)  (Gelesen 5774 mal)

Offline Basti*

  • Junior Mitglied
  • **
  • Beiträge: 87
Wie String kopieren? (=> call by value)
« 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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Wie String kopieren? (=> call by value)
« Antwort #1 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.

Offline Basti*

  • Junior Mitglied
  • **
  • Beiträge: 87
Re: Wie String kopieren? (=> call by value)
« Antwort #2 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?


Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Wie String kopieren? (=> call by value)
« Antwort #3 am: 04.06.13 - 13:57:35 »
Nein, eine Zuweisung erstellt immer eine Kopie...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Wie String kopieren? (=> call by value)
« Antwort #4 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).

Offline Basti*

  • Junior Mitglied
  • **
  • Beiträge: 87
Re: Wie String kopieren? (=> call by value)
« Antwort #5 am: 04.06.13 - 14:42:09 »
Ok danke!! Jetzt geht es! :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz