Type bei Function zurückgeben?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

feiadragon

Betreff: Type bei Function zurückgeben?

BeitragFr, Apr 30, 2004 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute

also direkt mal mein prob:

Code: [AUSKLAPPEN]

function laden(meshstring$,anders)
new current.mesh= new mesh

current\hof=loadmesh(meshstring) ;hof=handleoffile

;noch weiteres

return current
delete current (oder so)
end function

;so und im Hauptprog:
mesh1.mesh=new mesh
mesh1=laden("mesh.b3d",.........)



gibt irgendeine Komische Fehlermeldung...

Wieso?

thx, feidragon

Firstdeathmaker

BeitragFr, Apr 30, 2004 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Was für eine Fehlermeldung kommt denn?

Hast du das Type als Global definiert?
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

David

BeitragFr, Apr 30, 2004 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Code: [AUSKLAPPEN]

function laden.mesh(meshstring$,anders)


ging das nich so irgendwie?

Achja, ich weis nich genau, wie das bei Blitzbasic is, zumindest bei C++ würde der Code unter dem Return nichtmehr ausgeführt werden.

grüße
 

Edlothiol

BeitragFr, Apr 30, 2004 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, der Code unterm Return wird nicht mehr ausgeführt, da Return direkt zurückkehrt.

Blatolo

BeitragFr, Apr 30, 2004 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das was Davis gesagt hat ist richtig.
DIe Funktion muss natürlich wissen was sie zurückliefern soll und daher auch von diesem Type sein.
Es macht außerdem keinen Sinn das Objekt das zurückgegeben wurde zu löschen denn wieso sollte man etwas zurückgeben was sowieso gelöscht wird.
Beim zurückgeben des Objekts wird dieses nicht in ein neues kopiert sondern eine Referenz auf das Objekt zurückgegeben.
Somit existiert nur ein Objekt (kannst du per for each testen) und es besteht kein Grund es zu löschen.

Markus2

BeitragFr, Apr 30, 2004 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
so würde es auch gehen

global allmesh.mesh
global mesh1.mesh = new mesh
laden "blabla",mesh1
function laden(meshstring$,m.mesh1)

m\hof=loadmesh(meshstring)

end function

und so glaube ich auch

global mesh1.mesh
laden "blabla",mesh1
function laden(meshstring$,m.mesh1)

m.mesh = new mesh
m\hof=loadmesh(meshstring)

end function

regaa

BeitragFr, Apr 30, 2004 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
type bla
field feld
end type

handle_t=new_type()
b.bla=object.bla(handle_t)
print b\feld


function new_type()
b.bla=new bla
b\feld=12345
return handle(b)
end function
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Markus2

BeitragSa, Mai 01, 2004 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@regaa

warum nimmt ihr eigentlich immer alle das Handle und schreibt die
Func. nicht gleich richtig mit Function Name.BlaBlaType() ???

Blatolo

BeitragSa, Mai 01, 2004 9:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe auch nicht wieso ihr dort handles benutzt.
Finde es viel zu umständlich.
Würde es auch wie Markus

Aber wenn du es so machst dann wandle das zurückgegebene Handle doch gleich wieder in ein objekt um und speichere es nicht erst zwischen.
Sieht dann zwar unschön und unsauber aus, aber das ist bei handles in diesem verwendungszweck immer so.
Code: [AUSKLAPPEN]
b.bla=object.bla(new_type())


Da finde ich das hier viel schöner:
Code: [AUSKLAPPEN]
b.bla=new_type.bla()

So weiß man auch direkt was zurückgegeben wird.

Das .bla hinter dem new_type kann man beim aufruf auch weglassen da der typ ja schon in der Deklaration angegeben ist.

regaa

BeitragSa, Mai 01, 2004 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Blatolo hat Folgendes geschrieben:

Aber wenn du es so machst dann wandle das zurückgegebene Handle doch gleich wieder in ein objekt um und speichere es nicht erst zwischen.
Sieht dann zwar unschön und unsauber aus, aber das ist bei handles in diesem verwendungszweck immer so.
Code: [AUSKLAPPEN]
b.bla=object.bla(new_type())



Weil ich den zurückgegebenen Handle Wert weitergeben möchte und das nicht nur einmal.

Blatolo hat Folgendes geschrieben:

Da finde ich das hier viel schöner:
Code: [AUSKLAPPEN]
b.bla=new_type.bla()

So weiß man auch direkt was zurückgegeben wird.

Das .bla hinter dem new_type kann man beim aufruf auch weglassen da der typ ja schon in der Deklaration angegeben ist.


Ist denk ich mal Geschmackssache, ich persönlich finde was ich da oben geschrieben hab besser (Vielleicht nicht wegen der performance, aber wegen der Übersichtlichkeit).
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Jolinah

BeitragSa, Mai 01, 2004 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo ist Geschmackssache.


Code: [AUSKLAPPEN]

temp.raumschiff = GetKiller()

Function GetKiller.raumschiff()
  For r.raumschiff = each raumschiff
    if r\killer = 1 Then Return r
  Next
End Function



Code: [AUSKLAPPEN]

tmphandle = GetKiller()
temp.raumschiff = Object.raumschiff(tmphandle)

Function GetKiller()
  For r.raumschiff = each raumschiff
    if r\killer = 1 Then Return Handle(r)
  Next
End Function



Naja ist eigentlich beides recht übersichtlich. Nur finde ich das es in so einer Situation unnötig ist einen Umweg über das Handle zu machen. Man wandelt ja auch nicht ein Int in einen String um, gibt diesen zurück und dann wandelt man den String wieder in nen Int um. Ok ist nicht ganz das selbe, aber trotzdem...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group