Type als Eigenschaft

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Seven

Betreff: Type als Eigenschaft

BeitragSa, Mai 12, 2012 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Abend.

Momentan versuche ich einen ähnlichen Umgang mit Types zu nutzen, wie schon in Blitz3D.
Besonders nützlich fand ich dabei immer die Verschachtelungen von Types,
aber irgendwie funktioniert das in BlitzMax bei mir nicht ganz:

BlitzMax: [AUSKLAPPEN]

Liste1:TList = New TList
Liste2:TList = New TList

Type First
Field Value:Second
EndType

Type Second
Field Text:String
EndType

Local All:First = New First

For i = 0 To 10
All2:Second = New Second
All.Value = All2
All2.Text = "Hallo" + i
ListAddLast(Liste1,All )
ListAddLast(Liste2,All2)
Next

For All:First = EachIn Liste1
DebugLog All.Value.Text
Next

For All2:Second = EachIn Liste2
DebugLog All2.Text
Next


All.Value.Text -> Alle zehn Einträge "Hallo10"
All2.Text -> Hallo1 , Hallo2, Hallo3, ... , Hallo10

Wie kann das sein?

Xeres

Moderator

BeitragSa, Mai 12, 2012 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, dass ist das, was du machst.
Jedes New erstellt ein neues Second, aber First erstellst du nur einmal.

Es ist immer empfehlenswert die übliche T-benennung für Types zu benutzen und jeder Code ohne (Super)Strict ist langsamer und unsauber.
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)
 

Seven

BeitragSa, Mai 12, 2012 0:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht aber auch gerade darum das ich nur ein First haben will.

Es soll nähmlich für ein First eine unbestimmte Anzahl von "Value"s geben und Type in
Type ist das beste, was mir einfiel.

FireballFlame

BeitragSa, Mai 12, 2012 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap. Du hast nur ein All und überschreibst dessen .Value in jedem Schleifendurchlauf mit dem neuesten All2. Am Ende hast du in Liste1 10mal dasselbe Objekt. (Edit: Xeres war schneller; der Sache mit dem SuperStrict stimme ich auch zu.)
Abgesehen davon ist mir ein Rätsel, was der Code insgesamt bezwecken soll. Die Variablennamen ergeben nicht viel Sinn ("All"? Alle wovon denn? Und wieso heißt die Variable so, wenn immer nur ein einzelnes Objekt drin ist?) und ich blick da nicht wirklich durch. Was genau hast du denn vor?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Seven

BeitragSa, Mai 12, 2012 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, ich mache mir immer kleine Code's außerhalb des Hauptprogramms
und da sind Namen noch nicht richtig festgelegt.

Es geht darum, dass ich eine Art Button (First) haben will,
der bei einem Klick seinen Inhalt wechselt. Der Inhalt (Value.Text)
ist von der Anzahl her unbestimmt.

FireballFlame

BeitragSa, Mai 12, 2012 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du nur Texte speichern willst, was spricht dann gegen eine einfache TList mit lauter Strings drin?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
 

Seven

BeitragSa, Mai 12, 2012 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Anzahl der Buttons ist ebenfalls unbestimmt ^^

FireballFlame

BeitragSa, Mai 12, 2012 0:36
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
Type Button
Field Texts:TList
EndType

Von den Buttons kannst du ja so viele machen wie du willst. (Und die z.B. wiederum in einer anderen Liste speichern...)
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit
  • Zuletzt bearbeitet von FireballFlame am Sa, Mai 12, 2012 0:37, insgesamt einmal bearbeitet
 

Seven

BeitragSa, Mai 12, 2012 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahhh, dass probier ich doch gleich mal aus Very Happy

Danke

EDIT: Wie sollen die Texts String und TList gleichzeitig sein?

Xeres

Moderator

BeitragSa, Mai 12, 2012 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Du erstellst eine TList als Field und fügst dieser Strings hinzu. Das sind in Bmax auch Objekte.
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)

Midimaster

BeitragSa, Mai 12, 2012 9:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine TList dürfte für Dich als BB User neu sein. Sie wurde in BB quasi immer automatisch erstellt. Die "TList" in BB enthält alle Objekte des gleichen Typs und macht so ein For/EachIn möglich.

In BMax kümmerst Du dich selbst darum:
Beim neu erstellen eines TFirst-Objekt muss eine dazugehörende Liste neu erstellt werden und auch ein lokales TSecond.Objekt. Aber nur die Liste muss auch als Field des TFirst definiert sein:
BlitzMax: [AUSKLAPPEN]
Type TFirst
Field InnenListe:TList

Function Neu:TFirst(Wert$)
Local First:TFirst=New TFirst
First.InnenListe:TList=New TList
Local Value:TSecond=New TSecond
End Function


anschließend kannst du mit den Objekten arbeiten und mit Werten füllen:
BlitzBasic: [AUSKLAPPEN]
SuperStrict
Global Button:TFirst=TFirst.Neu("Hallo")

Type TFirst
Field InnenListe:TList

Function Neu:TFirst(Wert$)
Local First:TFirst=New TFirst
First.InnenListe:TList=New TList
Local Value:TSecond=New TSecond
Value.Text=Wert$
ListAddLast First.Innenliste, Value
Return First
End Function

wie du siehst fügst du am Ende das TSecond Objekt in die Innnenliste ein. Jetzt hat der Button eine Liste in der ein TSecond-Objekt mit dem Wert "Hallo" steht.



Nun kommt eine Methode hinzu, die weitere TSecond-Objekte mit weiteren Texten in diese Liste einträgt. Als Beweis siehtst du noch eine Methode, die alle TSecond der Liste printet:
BlitzMax: [AUSKLAPPEN]
SuperStrict
Global Button:TFirst=TFirst.Neu("Hallo")

Button.AddText "Aha"
Button.ShowAll

Type TFirst
Field InnenListe:TList

Function Neu:TFirst(Wert$)
Local First:TFirst=New TFirst
First.InnenListe:TList=New TList
Local Value:TSecond=New TSecond
Value.Text=Wert$
ListAddLast First.Innenliste,Value
Return First
End Function

Method AddText(Wert$)
Local Value:TSecond=New TSecond
Value.Text=Wert
ListAddLast Innenliste,Value
End Method

Method ShowAll()
For Local loc:TSecond=EachIn Innenliste
Print loc.Text
Next
End Method
End Type

Type TSecond
Field Text$
End Type
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Seven

BeitragSa, Mai 12, 2012 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh, so geht es.
Danke sehr.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group