Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-06-2009, 17:14   #1 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
Function in Function!

Hi!

Kann ich wie folgt eine funktion aufrufen aber gleichzeitig noch einen andere funktion die mit return werte wieder zurückgibt:

function1(function2());

hier wird dann funktion 1 aufgerufen, aber mit den Parametern die ich funktion 2 mit return angegeben habe. Nur rein zum Verständnis, funktionieren tut es, aber ich möchte schon auch wissen ob ich mir dass so richtig erkläre!
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.
velocity. ist offline   Mit Zitat antworten
Alt 01-06-2009, 17:30   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Jupp haut hin.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 01-06-2009, 17:39   #3 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
Ok, allerdings findet er die übermittelten Variablen in der funktion die aufgerufen wird nicht wirklich. Ich kann zwar die Variablen ausgeben lassen, aber neue werte zuweisen und wieder neu ausgeben geht nicht. Muss ich die Variablen denn trotzdem noch deklarieren obwohl ich mir die Werte von der anderen funktioner mit return übergeben lasse!

function 1()
{
var neu =1;
return neu;
}

function 2(function 1())
{
neu=neu+5;
>>> Hier sagt er mir immer: Kann Funktion oder Variable neu nicht finden!
}
}
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.

Geändert von velocity. (01-06-2009 um 17:42 Uhr)
velocity. ist offline   Mit Zitat antworten
Alt 01-06-2009, 17:41   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Code?
Omega Psi ist offline   Mit Zitat antworten
Alt 01-06-2009, 17:58   #5 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Wenn du eine Variable in einer Funktion mit "var" deklarierst, ist diese Variable lokal. Das heißt sie ist nur innerhalb dieser einen Funktion verfügbar. Mit einem return gibst du nur den Wert der Variablen, nicht die Variable selbst zurück.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 01-06-2009, 17:58   #6 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
also eigentlich sieht es so aus:


onFrame(1)
{
funktion2(funktion1());
}


funktion1()
{
var1 = 3;
var2 = 5;
var3 = 10;
return var1,var2,var3;



}

funktion2()
{



list.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void
{
prozent = var3;
>>> Meldung: Funktion oder Variable var3 wird nicht gefunden.
}
}


Ich haber aber den Eindruck, dass diese möglichkeit der übergabe von Variablen an eine andere funktion,
nicht das gleiche ist wie wenn ich die funktion so aufrufe: funktion2(var1,var2,var3);
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.

Geändert von velocity. (01-06-2009 um 18:02 Uhr)
velocity. ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:01   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Das ist falsch... via AS2... Eine Funktion kann nur einen Rückgabewert haben.

Ergo: return var1; oder einer der anderen Rückgabewerte.
Omega Psi ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:05   #8 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
Aber ich kann doch mit trace() mir in funktion 2 alle 3 variablen ausgeben lassen:

funktion2()
{
trace(var1);
trace(var2);
trace(var3);
}
funktioniert, also übergibt er auch alle 3 variablen.
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.
velocity. ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:07   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ja, das wird wahrscheinlich mit einem Sprachkonstukt zusammenhängen, dass sich Closure nennt.

Zumal ich nicht verstehe, wieso du (<- ?) einer Callback Funktion die Argumente mitgibst?!
Omega Psi ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:07   #10 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
Ah, den Post von Janoscharlipp habe ich garnicht gesehen! *g*
Und wie bewerkstellige ich es, dass die Variable übergeben wird!
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.
velocity. ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:11   #11 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Zitat:
Zitat von velocity. Beitrag anzeigen
Aber ich kann doch mit trace() mir in funktion 2 alle 3 variablen ausgeben lassen:

funktion2()
{
trace(var1);
trace(var2);
trace(var3);
}
funktioniert, also übergibt er auch alle 3 variablen.
Er übergibt nicht alle 3, wie OmegaPsi schon sagte entweder eins oder gar nix.
Das du die tracen kannst liegt daran, das du die Variablen nicht lokal in der Funktion deklariert hast.
Du könntest sie also auch in der 2 Funktion tracen ohne das du den Rückgabewert der ersten übergibst.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:11   #12 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Wenn du mehrere Werte die du in einer Funktion bestimmt hast, die du in einer anderen Funktion verwenden möchtest, dann musst du sie in ein Objekt speichern, und dann dieses Objekt aus der ersten Funktion zurückgeben. Wenn du gleich noch was für die Zukunft lernen möchtest, dann machst du nicht einfach nur ein simples Objekt, sondern du definierst in einer Klasse, was alles in dem Objekt gespeichert ist:
PHP-Code:
// in einer Datei MyObject.as
class MyObject {
    public var 
wert1:Number;
    public var 
wert2:Number;

(wobei du am besten sprechende Namen wählen solltest, also was ist das für ein Objekt (eine Position, oder eine Entität der realen Welt, ...) und was sind das für Werte (x-Koordinate, Alter, Größe, ...))

In deiner ersten Funktion erzeugst du dann eine neue Instanz von der Klasse (also ein Objekt, das so aufgebaut ist, wie in der Klasse angegeben)
PHP-Code:
// Groß- und Kleinschreibung beachten! Klassen werden Groß geschrieben, Variablen klein
var myObject:MyObject = new MyObject(); 
Und dann kannst du Werte hineinspeichern:
PHP-Code:
myObject.wert1 /* hier irgendeine tolle Berechnung ... */;
myObject.wert2 /* ... */
und das Objekt als Container deiner Werte aus der Funktion zurück geben:
PHP-Code:
return myObject
Deine Funktion hat damit jetzt einen klar definierten Rückgabetyp, sollte also wie folgt definiert werden:
PHP-Code:
function function1():MyObject {
    
// .. hier der Inhalt wie bisher beschrieben

Und deine zweite Funktion erwartet also jetzt ein Objekt von deinem neuen Typ:
PHP-Code:
function function2(myObject:MyObject) :Void {
    
// hier kannst du jetzt mit den Werten arbeiten
    
trace("wert1: " myObject.wert1);

__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:12   #13 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
Warum ich dass so mache hat folgenden grund, eine gewisse funktion soll eben durchlaufen werden, ist diese abgearbeitet wird automatisch eine weitere funktion aufgerufen, allerdings möchte ich in dieser nicht jedesmal die werte neue ermitteln müssen, bzw. möchte ich nicht jedes mal die gleiche zeilen eintragen damit ich die werte von variablen habe. Deshalb dachte ich an eine funktion die eben immer die variablen werte ermittelt und mir die variablen mit samt den werten zurückliefert.
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.
velocity. ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:24   #14 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Sorry wegen dem Closure... hab nur einen kurzen Blick auf den Code geworfen

Bzgl deines Problems: Deswegen das Objekt.
Omega Psi ist offline   Mit Zitat antworten
Alt 01-06-2009, 18:33   #15 (permalink)
Neuer User
 
Benutzerbild von velocity.
 
Registriert seit: May 2005
Beiträge: 310
Alles klar, dann versteh ichs doch richtig. mit return übergebe ich nur den inhalt einer variablen nicht die variable selbst. Außerdem ist nur ein rückgabewert möglich. Mit einem Objekt erstelle ich also wie immer eine obergruppe, die dann mit return als QUASI ein WERT zurückgegeben werden kann.

Was ist aber mit funktion (var1,var2,var3...) übergebe ich so nur werte oder die komplette variable!
__________________
- we start 2009 -


http://www.aelfsciene.com - © Copyright. All rights reserved.
velocity. ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
erklärung, variablen

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 15:54 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele