Hallo!
Ich bin weiterhin am schreiben (m)einer Scriptsprache (https://sourceforge.net/projects/smith-somemaybe/).
Diese soll auch Zugriff auf Variablen, Proceduren und Funktionen von Lazarus, also dem Programm welches den Interpreter gestartet hat, haben.
Um dafür ein Interface zu bauen benötige ich jedoch die Möglichkeit zur Laufzeit die Namen zu erfahren (also z.B. das ich von der Variable Foo erfahre das diese "Foo" heißt).
Existiert eine solche Möglichkeit?
Wenn nicht müssen halt alle Variablen von Hand in eine Liste eingetragen werden mit jeweiligem Verweis auf den Namen und die variable Selbst.
Das würde ich jedoch sehr gerne vermeiden wollen.
Gruß Teekeks
Namen als String
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Namen als String
Vielleicht sind die RTTI das, was du suchst?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Namen als String
Nein. Funktions- und Variablen-Namen existieren in allen Programmiersprachen grundsätzlich nur im Quelltext und werden beim Linken durch die richtige Adresse ersetzt. Gegebenenfalls können natürlich noch externe Informationen aus den Debugging-Informationen gewonnen werden.Teekeks hat geschrieben:Um dafür ein Interface zu bauen benötige ich jedoch die Möglichkeit zur Laufzeit die Namen zu erfahren (also z.B. das ich von der Variable Foo erfahre das diese "Foo" heißt).
Existiert eine solche Möglichkeit?
Diese Listen nennen sich Hash-Listen (Referenzierung anhand einer Zeichenkette => schneller finden); In der FCL gibt es mindestens zwei/drei Implementierungen.Teekeks hat geschrieben:Wenn nicht müssen halt alle Variablen von Hand in eine Liste eingetragen werden mit jeweiligem Verweis auf den Namen und die variable Selbst.
Das würde ich jedoch sehr gerne vermeiden wollen.
Soweit ich weiß, werden für einfache Variablen keine RunTime-Type-Information erzeugt. Diese werden nur für alles, was in Klassen als "published" gekennzeichnet ist, generiert. Du könntest also auch eine Klasse schreiben, die eine Menge Eigenschaften besitzt, die einfach nur auf die Variablen zugreifen – dann ist der Zugriff auf den Wert recht einfach.carli hat geschrieben:Vielleicht sind die RTTI das, was du suchst?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Namen als String
Danke für eure Antworten!Socke hat geschrieben:Diese Listen nennen sich Hash-Listen (Referenzierung anhand einer Zeichenkette => schneller finden); In der FCL gibt es mindestens zwei/drei Implementierungen.Teekeks hat geschrieben:Wenn nicht müssen halt alle Variablen von Hand in eine Liste eingetragen werden mit jeweiligem Verweis auf den Namen und die variable Selbst.
Das würde ich jedoch sehr gerne vermeiden wollen.
Dann werde ich mir einmal Hash-Listen ansehen (und vl. auch bei meinem Interpreter nutzen da mir der Variablen-Aufruf noch viel zu langsam ist).
Noch einmal danke für eure Hilfe!
-
- Beiträge: 359
- Registriert: Mi 27. Mai 2009, 20:54
- OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
- CPU-Target: x86
- Wohnort: Cottbus
Re: Namen als String
Ich muss denke ich noch einmal Pushen.
Ich habe nun viel gesucht aber nicht das gefunden was ich suche.
Kennt einer von euch einen guten Link in dem der Umgang mit Hash-listen erklärt wird?
Oder eine Unit die eine solche zur Verfügung stellt?
Ich habe nun viel gesucht aber nicht das gefunden was ich suche.
Kennt einer von euch einen guten Link in dem der Umgang mit Hash-listen erklärt wird?
Oder eine Unit die eine solche zur Verfügung stellt?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Namen als String
Hash-Listen gibts in der Unit contnrs (wie sonst fast alle anderen Listen auch) und in der Unit xmlutils ist eine Hash-Liste definiert. Die Unterschiede liegen vor allem an dem verendeten Schlüssel (Shortstring, Widestring, Ansistring) und den Datencontainern bzw. -elementen.Teekeks hat geschrieben:Kennt einer von euch einen guten Link in dem der Umgang mit Hash-listen erklärt wird?
Oder eine Unit die eine solche zur Verfügung stellt?
Für die zuerst genannte Unit findest du die Dokumentation unter http://lazarus-ccr.sourceforge.net/docs ... dex-4.html; einfach mal die Beschreibungen aller Klassen anlesen und du weißt, mit welcher du dich näher beschäftigen musst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein