Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.03.2009, 12:57 Titel: Is doch echter Schmuh.... TYPE (Forward Referencing) |
|
|
Laut FB-Referenz funktioniert folgender Quelltext:
Code: |
TYPE FwdUDT2 AS UDT2
TYPE UDT1
a AS INTEGER
b AS FwdUDT2 PTR
END TYPE
TYPE UDT2
c AS INTEGER
d AS INTEGER
END TYPE
|
folgender aber schon NICHT mehr:
Code: |
TYPE FwdUDT2 AS UDT2
TYPE UDT1
a AS INTEGER
b AS FwdUDT2 PTR
declare sub testen
END TYPE
sub udt1.testen
print b->c
print b->d
end sub
TYPE UDT2
c AS INTEGER
d AS INTEGER
END TYPE
|
Nach meinen Tests muss man es umständlich und verwirrend umschreiben (wobei man die Reihenfolge der TYPEs und SUBs einhalten muss!):
Code: |
TYPE FwdUDT2 AS UDT2
TYPE UDT1
a AS INTEGER
b AS FwdUDT2 PTR
declare sub testen
END TYPE
TYPE UDT2
c AS INTEGER
d AS INTEGER
END TYPE
sub udt1.testen
print b->c
print b->d
end sub
|
oder kennt jemand noch einen anderen Weg? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.03.2009, 13:44 Titel: |
|
|
Die SUBs alle erst komplett nach sämtlichen TYPE-Deklarationen zu schreiben, ist doch jetzt nicht sooo blöd? Das mit dem Forwarding kommt halt daher, weil immer schon alles, was verwendet werden soll, bereits deklariert werden muss. Meiner Meinung nach könnte der Compiler durchaus zwei Durchläufe machen, einmal um die Deklarationen zusammen zu sammeln und dann einen zum Compilieren. Er macht es leider nicht, ist halt eben so. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.03.2009, 14:49 Titel: |
|
|
Ah ok... hm.. sollte man vielleicht mal in der Referenz erwähnen... ich war echt davon ausgegangen, dass solange alles referenziert ist, auch alle elemente so ohne weiteres ansprechbar sind... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.03.2009, 15:56 Titel: |
|
|
An sich ist das genauso wie bei den SUBs. Wenn sie definiert wird, bevor man sie das erste Mal aufruft, dann kann man sich das Deklarieren sparen. Ich habe es zwar nicht ausprobiert, aber ich bin ziemlich sicher, dass man bei zwei sich gegenseitig aufrufenden SUBs um eine Deklaration nicht herumkommt. Ähnlich bei den UDTs: Solange sie nicht deklariert sind, kann man sie nicht verwenden, auch nicht in anderen UDTs (mit Ausnahme des Forward Referencing). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 31.03.2009, 08:58 Titel: |
|
|
Ja ok, aber grade die Properties,Funktionen und Subs von Types halte ich immer gerne möglichst nahe an der TYPE-Definition.. also rein von der Position im Quelltext.
Ich finde, das zieht alles aus dem zusammenhang raus.. wenn ich einen Quelltext lese, dann erwarte ich naturgemäß alles ungefähr dort wo es zum ersten mal erwähnt wird.
Wenn ich also nach einer Property einer Type suche, dann erwarte ich sie meistens in der unmittelbaren nähe der Type.. Nach dem Motto: Ich such nen Apfel find ihn aber nicht beim Obst sondern bei Kraut-und-Rüben ...
Naja.. nützt ja alles nix sich drüber zu beschweren, ändern kann da so schnell keiner was dran. |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 31.03.2009, 14:55 Titel: ! |
|
|
Forward-Deklarieren heisst nicht, dass der Compiler ein Hellseher wird. Es ist dazu da, dass ggf. UDT1 und UDT2 sich gegenseitig referenzieren können. Aber nicht, dass der Compiler nach der Deklaration von UDT1 schon automatisch weiss, wie die von UDT2 aussehen wird...
VG!
Croco |
|
Nach oben |
|
 |
|