Runtime funktioniert in Modulen nicht

Für allgemeine Fragen zur Programmierung mit PureBasic.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Runtime funktioniert in Modulen nicht

Beitrag von Andesdaf »

Code: Alles auswählen

DeclareModule Test
EndDeclareModule

Module Test
  Runtime Enumeration 
    #RT
  EndEnumeration
  
  Debug IsRuntime("#RT")
EndModule

; Runtime Enumeration 
;   #RT
; EndEnumeration
; 
; Debug IsRuntime("#RT")
So wird 0 ausgegeben. Wenn man die Kommentierung umkehrt, wird 1 ausgegeben. Das Verschieben der
Enumeration in den DeclareModule-Block bringt auch nichts.

Getestet mit PB 5.31 x86 / Win8

Oder hab ich was übersehen?

__________________________________________________
Thread verschoben
Bugs>Allgemein
09.12.2014
RSBasic
Win11 x64 | PB 6.20
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Runtime funktioniert in Modulen nicht

Beitrag von Nino »

Gleiches Problem hier mit PB 5.31 x64 / Windows 7.
Ich denke nicht, dass Du etwas übersehen hast.
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: Runtime funktioniert in Modulen nicht

Beitrag von freak »

So gehts:

Code: Alles auswählen

Debug IsRuntime("Test::#RT")
When accessing public module items, the module prefix name is mandatory, even if UseModule is used.
http://www.purebasic.com/documentation/ ... ntime.html


Dieser Zusatz scheint in der deutschen Hilfe zu fehlen.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Runtime funktioniert in Modulen nicht

Beitrag von Nino »

freak hat geschrieben:So gehts:

Code: Alles auswählen

Debug IsRuntime("Test::#RT")
When accessing public module items, the module prefix name is mandatory, even if UseModule is used.
http://www.purebasic.com/documentation/ ... ntime.html
In dem Beispiel im 1. Beitrag wird aber gar nicht auf ein "public module item" zugegriffen, sondern auf ein privates Item, und der Zugriff findet innerhalb des Moduls statt.
Wieso sollte es in diesem Fall nötig sein, das Modul-Prefix anzugeben? Der Compiler weiß doch (bzw. kann es wissen), wie das Modul heißt, in dem dies stattfindet.

Falls das hier demonstrierte Verhalten dennoch nicht als Bug eingestuft und daher nicht geändert wird, so sollte die Hilfe diesen Fall auch abdecken (zumal wohl kaum ein Nutzer solch ein Verhalten erwartet).
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Runtime funktioniert in Modulen nicht

Beitrag von Andesdaf »

Na ja, die Referenz in der Executable muss eindeutig sein, auch wenn Module verwendet werden.
Später kann man 'von außen' nicht mehr einsehen, ob sich die entsprechende Referenz inner- oder außerhalb eines
Modules befand. Von daher ist die Vorgehensweise so schon sinnvoll, wie ich finde. Wenn man beide Codeteile
zusammen ausführt, bekommt man bei beiden 1 als Ergebnis.

Auf jeden Fall danke für die Erläuterung.
Win11 x64 | PB 6.20
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Runtime funktioniert in Modulen nicht

Beitrag von Nino »

Andesdaf hat geschrieben:Na ja, die Referenz in der Executable muss eindeutig sein, auch wenn Module verwendet werden.
Später kann man 'von außen' nicht mehr einsehen, ob sich die entsprechende Referenz inner- oder außerhalb eines
Modules befand.
Ja, das verstehe ich. :-)

Aber während des Compilier-Vorgangs weiß der Compiler doch, wie das Modul heißt in welchem er die betr. private Referenz vorgefunden hat. Warum soll es erforderlich sein dass wir das Modul-Prefix per Hand hinschreiben, wenn der Compiler doch selbst das passende Prefix in die EXE mit reinschreiben kann, damit das später eindeutig ist?
Es wäre konsistent und viel schöner, wenn es für uns diesbezüglich für die Runtime Sachen keine Sonderregeln gäbe. Und ich sehe eben nicht, warum solche nötig wären.

Leider ist Freak ja gar nicht richtig auf das Beispiel in Deiner ersten Nachricht eingegangen.
Denn er schrieb etwas über "public module items".
In Deinem beispiel tritt das Problem aber bei einem privaten Modul-Item auf!

Falls ich etwas übersehen haben sollte, bitte ich um "Aufklärung" von kompetenter Seite.
Antworten