| |
|
|
- Seite 1 - |
|
Dean Wood | Hallo, ich suche nach einer Möglichkeit Arrays an eine Instanz zu binden, ausgehend vom Beispiel in der Doku:
Leider scheint dass nicht zu funktionieren, vielleicht habt ihr eine Lösung auf die ich gerade nicht komme.
DeanWood. |
|
|
| Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco | 23.01.2013 ▲ |
|
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
RGH | Oh, da waren sogar noch einige Fehler drin, die mir eben aber auch nicht auffielen:
1. Die Konstruktor-Methode muß auch in der Methodenliste der Klassendefinition stehen. Wenn nicht, wird sie nie aufgerufen. .id& hat dann also 0 und es wird dann ab XProfan X2 die ListboxListe genutzt. Bei XProfan 11 war das noch nicht der Fall und somit resultiert Deine Fehlermeldung. Da .sache& dann auch 0 ist ...
2. Die Methode Inhalt hat einenm Parameter. Dieser sollte im Hauptprogramm auch angegeben werde, Du willst den ersten Eintrag sehen? Dieser hat den Index 0. So funktioniert es auch mit XProfan 11:
Class Tasche = sache&,\
id&, \
tasche@,\
hinzu@,\
inhalt@
proc Tasche.Tasche
.sache& = Create("List",1)
.id& = Create("List",1)
endproc
proc Tasche.hinzu
parameters idnr$,bzsache$
@AddString(.id&,idnr$)
@AddString(.sache&,bzsache$)
endproc
proc Tasche.inhalt
parameters idnr%
declare zeile$,zeile2$
zeile$ = @GetString$(.sache&,idnr%)
zeile2$ = @GetString$(.id&,idnr%)
zeile$=zeile$+":"+zeile2$
return zeile$
endproc
CLS
declare TobysTasche#
TobysTasche# = @New(Tasche,1,1)
TobysTasche#.hinzu("1","Knochen")
Print TobysTasche#.inhalt(0)
waitinput
Gruß Roland |
|
|
| XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 24.01.2013 ▲ |
|
|
|
|
|
| Ich saaach mal es ist wie es ist -
es gibt in XProfan keine Arrays als Eigenschaft/ Element einer Klasse.
Nimm vlt. einfach ein Long und im Konstruktur ein CreateList. |
|
|
| |
|
|
|
| Schau mal zum Thema Text-Adventure hatte ich vor Jahren mal was... [...]
Müsste natürlich auf aktuelles XProfan angepasst/ umgeschrieben werden. |
|
|
| |
|
|
|
Dean Wood | Danke, dann such ich jetzt nicht mehr verzweifelt in die falsche Richtung und kann nach anderen Lösungen ausschau halten, wie die von dir vorgeschlagene.
Wenn es nicht all zu viel Platz in der Tasche des Hundes gibt, kann man es ja auch statischer angehen fällt mir gerade ein, zum Beispiel:
In einem mehrdimensionalen Array was man woanders definiert kann man ja dann alle "Dinge" einer eindeutigen Bezeichnung zuordnen und somit dann die Bindung an die jeweilige Instanz bewirken. Wäre zwar ein wenig umständlich müsste aber funktionieren.
DeanWood.
Nachtrag: Unsinn *klatschmirvordenKopf* wenn jeder Hund eine Tasche besitzt und alle Hunde namentlich bekannt sind, wie wärs denn mit einer Klasse für Taschen ;) Herje heute fallen bei mir die Groschen aber auch Pfennigweise |
|
|
| Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco | 23.01.2013 ▲ |
|
|
|
|
| Ist schon richtig. Ein nicht dynamisches mehrdimensionales Array (also mit statischer Größe) lässt sich aber auch leicht mit einem eindimensionalem Array herbilden.
Statt 8,2 quasi 16. |
|
|
| |
|
|
|
Dean Wood | Hmm jetzt bin ich aber am grübeln wieso ich mir ein eindimensionales Array herbeibilden sollte, meine Logik ging in die Richtung:
Sache$[0,0]= ID Sache$[0,1]= Bezeichnung
Das lässt sich dann besser abfragen fand ich.
In der Instanz stünde dann eben unter PlatzEins zum Beispiel der Wert von Sache[0,0] drin.
Deanwood. |
|
|
| Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco | 23.01.2013 ▲ |
|
|
|
|
| Das wäre quasi gleichbedeutend mit:
Class Hund = Geburtsdatum$(10), \ Rasse$(32), \ ... sachen_bezeichnung&,\ sachen_wert&,\ ... bellen@, \
und im Konstruktor für die 2 sachen_ ein createList.
So ist immer getString$(this->sachen_bezeichnung&,id) leicht auch der Wert per getString$(this->sachen_wert&,id) ermittelbar -
also wie ein 2 dimensionales Stringarray nur eben 2 Stringarrays.
So sind alle Eigenschaften der Sachen über den selben Schlüssel/ ID erreichbar nur eben aus 2 verschiedenen Arrays. |
|
|
| |
|
|
|
Dean Wood | Irgendwie sehe ich den Vorteil nicht, die Lösung wäre immernoch statisch da ja auf zwei statische eindimensionale Arrays zugegriffen werden würde und wenn man dies innerhalb der Klasse macht würde man ja dann
... sachen_platzEins_bezeichnung&,\ sachen_platzEins_wert&,\ sachen_platzZwei_bezeichnung&,\ sachen_platzZwei_wert&,\
...
denn der Hund hat ja mehrere Sachen dabei auf die zugegriffen werden soll aber vielleicht ist es heute auch zu spät und ich kapiers einfach nicht mehr ;)
DeanWood. |
|
|
| XProfan 9Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco | 23.01.2013 ▲ |
|
|
|
|
| Der "Vorteil" wäre einfach das Du beliebig viele Sachen mitschleppen kannst und nur pro Eigenschaft einer Sache eine Liste brauchst. |
|
|
| |
|
|
|
Dean Wood | Jetzt hab ich es geschnallt, in der Klasse wird eine Liste aus zwei eindimensionalen Arrays erzeugt, dadurch dass die Liste innerhalb der Klasse erstellt wird ist sie dynamisch als auch Instanzgebunden und somit erweiterbar, was letztlich zur Folge hat dass ich die einzelnen Plätze nicht mehr mit eigenen Variablen deklarieren muß.
Ich sag doch, es dauert ein wenig länger bei mir heute ^^
Danke, DeanWood. |
|
|
| Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco | 23.01.2013 ▲ |
|
|
|
|
Dean Wood | Ich hab hier wie verzweifelt nach createList gesucht, bis ich feststellte dass es die Funktion nur mittels XPSE gibt |
|
|
| XProfan 9Phantasie ist nicht Ausflucht. Sich etwas vorstellen heißt, eine Welt bauen, eine Welt erschaffen. Eugène Ionesco | 23.01.2013 ▲ |
|
|
|
|
| Löl. Nicht ganz. Nativ heist die Funktion in xpse createList in nProcs und die nicht- native Variante heist in XProfan einfach create("List",...
Als xpse-Nutzer kann man aber auch im nicht-nativen Bereich createList schreiben wie auch createWindow oder createText etc. da er dies automatisch nach create("... umwandelt. |
|
|
| |
|
|