[GELÖST] Datentyp der alles annehmen kann?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: [GELÖST] Datentyp der alles annehmen kann?

BeitragDi, Jul 03, 2012 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich brauche für eine Funktion einen Datentyp, der alles annehmen kann (Also z.B.: Int, Float, String, TStream, TImage, usw.)
Habe es schon mit dem Datentyp Object versucht, dieser scheitert aber z.B.: bei Ints.
Gibt es sowas überhaupt in BMax? Wenn Ja, wie heißt er? Wenn nein, könnte man das irgendwie umgehen?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Mi, Jul 04, 2012 22:45, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDi, Jul 03, 2012 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Object ist da die beste Variante, wenn du nicht einen eigenen Type dafür erstellst. Ints müsstest du als String übergeben und dann wieder zurück casten.

Und bitte reduziere deine Signatur ein Stück, mehr als vier Zeilen in normaler Schriftgröße ist etwas zu groß - danke.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

CO2

ehemals "SirMO"

BeitragDi, Jul 03, 2012 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok,
Allerdings brauche ich das in eine Funktion, und es wird als Parameter übergeben. Deshalb weiß ich nicht, welchen Typ diese Variable hat, und möchte es auch wenn möglich nicht explizit Fragen (Durch einen Extraparameter)

So sieht der Code der Funktion aus BlitzMax: [AUSKLAPPEN]
Function Log_WTLI:Int(Variable:Object, Test:Object, MessageIfTrue:String, TagIfTrue:Int = MSG, MessageIfFalse:String = "", TagIfFalse:Int = MSG)
If(Variable = Test)
Log_WTL(MessageIfTrue, TagIfTrue)
Return 1
Else
Log_WTL(MessageIfFalse, TagIfFalse)
Return 0
EndIf
End Function

Zur Erklärung: - Log_WTL: Schreibt einen Log-Eintrag in eine geöffnete Datei
- Die Funktion: Schreibt einen Log-Eintrag, wenn das Statement True ist (Also "Variable = Test"), sonst schreibt sie einen anderen Log-Eintrag

Hier der Code, wo sie zum Einsatz kommt (Als Test, allerdings kommt immer "Ist Falsch" raus...) BlitzMax: [AUSKLAPPEN]
Local VIV:Int = 1
Local VIV2:Float = 1.20002

Log_WTLI(String(VIV), String(1), "VIV: Ist RICHTIG!", ERR, "VIV: Ist FALSCH!", MSG)
Log_WTLI(String(VIV2), String(1.20002), "VIV2: Ist RICHTIG!", MSG, "VIV2: Ist FALSCH!", MSG)


Kann man das denn anders lösen (Außer den Datentyp in der Parameterliste abzufragen)?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Jul 03, 2012 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum bekommen deine Objekte keine Methode, die in ein Logfile schreibt?
Ansonsten könnte man noch mit Reflection arbeiten.

oder:
BlitzMax: [AUSKLAPPEN]
SuperStrict

Print ObjTyp("text")
Print ObjTyp("1500")
Print ObjTyp("3.15")
End

Function ObjTyp:String(_obj:Object)

Local s:String = String(_obj)
If s.Find(".") > - 1 Then
Return "Float " + Float(s)
ElseIf s = String(Int(s)) Then
Return "Int " + Int(s)
Else
Return "String " + s
EndIf

End Function

Oder du benutzt eine Assert / Try-Catch Variante...
Ich würde auf die Funktion verzichten und die Debugausgabe individuell schreiben.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Hummelpups

BeitragMi, Jul 04, 2012 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
können strings keine Punkte enthalten?

Hallo Welt.
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

DaysShadow

BeitragMi, Jul 04, 2012 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst dir auch einfach die paar primitiven Datentypen in einen Type packen, sodass du TInt, TFloat, TDouble usw. hast, die einfach nur jeweils eine Variable value haben vom jeweiligen richtigen Typ.
Dann kannst du Object als Typ für alles nehmen.
Blessed is the mind too small for doubt
 

CO2

ehemals "SirMO"

BeitragMi, Jul 04, 2012 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, erstmal entschuldigung, dass ich jetzt erst zurückschreibe.

Ich danke allen, die halfen, das Problem hat sich nun geklärt.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragMi, Jul 04, 2012 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du [GELÖST] in den Titel editierst, wäre eine kurze Erklärung zur Lösung nett.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group