Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-12-2005, 11:06   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 18
Question Funktionsparameter als Referenz übergeben

Hallo,

Wie kann man an eine Flash-Funktion eine Variable übergeben die in der Funktion direkt geändert wird ?

Bsp:
Code:
function getValue( arr, iReadPos ) : Number
  { return arr[iReadPos++];
  }
arrTmp = new Array( 643, 827 );
iPos = 0;
val1 = getValue( arrTmp, iPos );
val2 = getValue( arrTmp, iPos );
In diesem Fall müsste also der Wert der Variablen iPos (bzw iReadPos) in der Funktion geändert (iReadPos++) und zurückgegeben werden. In C++ würde man sowas mit einem Pointer oder einer &-Referenz lösen - In Flash habe ich solche Möglichkeiten aber bisher noch nicht gefunden.

Eine Möglichkeit wäre den return-Wert zu mißbrauchen und ein Array mit 2 Werten zurückzugeben (Wert und iReadPos), aber das wird bei größeren Projekten sehr unübersichtlich und ist außerdem extrem unschön.

Gruß
Plasm
Plasm ist offline   Mit Zitat antworten
Alt 16-12-2005, 11:15   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
So auf die schnelle...
PHP-Code:
function getValuearr: Array , iReadPosNumber ) : Number
  
{ return arriReadPos ];
  }
var 
arrTmp: Array = new Array( 643 827 );
var 
iPosNumber 0;
val1 getValuearrTmpiPos++ );
val2 getValuearrTmpiPos++ ); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 16-12-2005, 11:25   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 18
Danke für die Antwort, aber das löst das Problem an sich nicht...

Der Code war ja nur ein Beispiel um das Problem zu demonstrieren. Die eigentliche Funktion in der das Problem auftritt ist wesentlich komplexer. Da lässt sich das Problem nicht so einfach an eine andere Stelle verfrachten...
Plasm ist offline   Mit Zitat antworten
Alt 16-12-2005, 11:31   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Du kannst aber nicht die Variable in der Funktion hochzählen, da wie du schon richtig erkannt hast keinen Pointer dafür hast.

Es gäbe noch die Möglickeit die Variable global zu definieren und diese in der Funktion hochzuzählen, dadurch würde auch der Parameter "iReadPos" wegfallen.

Bsp.:
PHP-Code:
function getValuearr: Array ) : Number 
  
{ return arr_global.iPos++ ]; 
  } 
var 
arrTmp: Array = new Array( 643 827 ); 
_global.iPos 0
val1 getValuearrTmp ); 
val2 getValuearrTmp ); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 16-12-2005, 11:37   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 18
Ja, daran habe ich auch schon gedacht, ist aber auch nicht unbedingt die sauberste Lösung. Vor allem in größeren Projekten, in denen es dann dadurch sehr viele globale Variablen geben wird die eigentlich nicht sein müssten, ist das sehr unschön.

Tja, schade. Ich dachte es gibt so etwas wie die &-Referenz z.B. bei PHP. Da schreibt man einfach:
Code:
function getValue( $arr, &$iReadPos )
  { ...
  }
Damit wird der Wert der übergebenen Variable direkt geändert.

Trotzdem Danke!
Plasm ist offline   Mit Zitat antworten
Alt 16-12-2005, 11:52   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Ansonsten musst du dir selber ne klasse schreiben die eine Variable vom Datentyp Number enthält.
Dann kannst du quasi eine Referenz auf die Instanz der Klasse, der Funktion übergeben und in der Funktion dann auf diese Variable zugreifen.

Ist aber warscheinlich zuviel des guten...
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 16-12-2005, 22:53   #7 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Das ist genau die richtige Lösung rendner[i], schliesslich wollen wir doch nicht die Eigenschaften von anderen Leuten, äh Instanzen verändern. Du musst im Prinzip eine Klasse schreiben, der du das Array als Referenz übergibst und die kann das Zählen und auch das Liefern des Werts übernehmen.

mfg. r
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele