MemberVar umbenennen
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: MemberVar umbenennen
Das Problem ist schon bekannt, seit es Xbase++ Klassen gibt.
Wenn der Parser besser wäre, würde er zwischen einfachen Kommandos, Variablen (verboten, da Namenskonflikt) und Methoden / Instanzvariablen unterscheiden (die dürften keine Fehlermeldung geben).
Wenn der Parser besser wäre, würde er zwischen einfachen Kommandos, Variablen (verboten, da Namenskonflikt) und Methoden / Instanzvariablen unterscheiden (die dürften keine Fehlermeldung geben).
Gruß
Hubert
Hubert
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: MemberVar umbenennen
Jimmy, das ist nur noch mehr Blödsinn, mit Verlaub (ich stimme Jans Vermutung zu). Kennst Du Dich mit der JSON-Notation überhaupt aus?
All das ist kein Problem inhaltlicher Art, sondern, wie Hubert gerade ganz richtig schrieb, ein Problem des Syntaxparsers, der da Kommandos nicht von anderen Elementen unterscheiden kann. Mit GetNoIVar kann man das hier gut umgehen. Wenn man JSON in gepaarte Arrays (Name/Inhalt der Instanzvariablen) umschaufelt, muss man ständig nach den Variablen suchen (in Bäumen!) oder sich Positionen merken - die aber wechseln können, sogar innerhalb einer Datenlieferung.
Per Makro könnte man das Problem vermutlich auch umgehen, aber dann dürfte das erzeugte Objekt nicht LOCAL sein.
Und, noch einmal:
Mist.Dings.Next.Murks in JS-Notation wären drei Objekte (Mist, Dings, Next) und ein Irgendwas (Objekt oder andere Variable). Selbst in JS oder VB sind Methoden durch die Parameterklammern erkennbar. In JS werden bei Arrays eckige Klammern verwendet.
All das ist kein Problem inhaltlicher Art, sondern, wie Hubert gerade ganz richtig schrieb, ein Problem des Syntaxparsers, der da Kommandos nicht von anderen Elementen unterscheiden kann. Mit GetNoIVar kann man das hier gut umgehen. Wenn man JSON in gepaarte Arrays (Name/Inhalt der Instanzvariablen) umschaufelt, muss man ständig nach den Variablen suchen (in Bäumen!) oder sich Positionen merken - die aber wechseln können, sogar innerhalb einer Datenlieferung.
Per Makro könnte man das Problem vermutlich auch umgehen, aber dann dürfte das erzeugte Objekt nicht LOCAL sein.
Und, noch einmal:
Mist.Dings.Next.Murks in JS-Notation wären drei Objekte (Mist, Dings, Next) und ein Irgendwas (Objekt oder andere Variable). Selbst in JS oder VB sind Methoden durch die Parameterklammern erkennbar. In JS werden bei Arrays eckige Klammern verwendet.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: MemberVar umbenennen
JA
NEINJan hat geschrieben: würde auch Pablos JSON-Klasse scheitern. Die ja auch mit MemberVars arbeitet
er arbeitet mit TGXbStack()
es gibt zwar die
Code: Alles auswählen
INLINE METHOD SetNoIVar(k,v)
INLINE METHOD GetNoIVar(k)
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: MemberVar umbenennen
können wir uns darauf einigen das dass JSON Format (was ich kenne) NICHT das Problem ist !
wenn ich ein Array oder "Stack" wie Pablo nehme und ein externes Format einlese ist es egal was kommt :
String, Num, Date, Blob etc.
der Grund liegt in Windows denn ich habe nur eindeutige Pointer (numerisch) wo ich die Daten ablege.
---
das Alaska DataObject soll das ganze nun mit "Namen" machen und da kommt das "interne" Problem mit KEYWORDs
ein "echtes" DataObject hat solche Problem NICHT denn auch dort wäre der "Name" auch nur ein Pointer der zu einem String führt.
---
Code: Alles auswählen
INLINE METHOD SetNoIVar(k,v)
return ::set_prop( k , v )
// ---------------------------------------------------------------------------------
INLINE METHOD GetNoIVar(k)
return ::get_prop( k )
// ------------------
Code: Alles auswählen
INLINE SYNC METHOD set_prop( k , v )
local cnt := nRShift(Len(::m_json_hash),2)
local dwh := 0
local pos := @ot4xb:_dwscan_lwstrcrc32(::m_json_hash,cnt,__vstr(k,""),-1,@dwh)
if pos == -1
pos := cnt
::m_json_hash += __i32(dwh)
aadd( ::m_json_props , __anew( __vstr(k,"") , v ) )
else
::m_json_props[ pos+1][2] := v
end
return NIL
// ---------------------------------------------------------------------------------
INLINE SYNC METHOD get_prop( k )
local cnt := nRShift(Len(::m_json_hash),2)
local dwh := 0
local pos := @ot4xb:_dwscan_lwstrcrc32(::m_json_hash,cnt,__vstr(k,""),-1,@dwh)
if pos == -1
return NIL
end
return ::m_json_props[ pos+1][2]
---
es geht mir nicht darum "Recht" zu haben sondern eine Lösung zu finden.
das ist aber oft nur dann zu lösen wenn man sich von der Xbase++ "Beschränkung" löst.
nun baut aber alles auf Windows und deren API auf also muss man dort nach einer Lösung suchen.
ein DataObject, was wohl wie alle XbParts, von der CLASS Abstract() abgeleitet wurde kann also nur eingeschränkt genutzt werden wie alle XbParts
gruss by OHR
Jimmy
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: MemberVar umbenennen
Mensch, Jimmy.
Blödsinn, Kapitel III. Mit Verlaub.
XbParts sind Controls. Ihnen ist gemein, dass sie allesamt von XbpWindow() abgeleitet sind. Das Data Object hat mit Xbase Parts nix zu tun. Abstract() ist die Mutter aller Klassen, die es in Xbase++ gibt, und sie stellt allgemeine Methoden wie ClassDescribe() und ähnliche zur Verfügung - auch dem Data Object. Auch das hat mit Xbase Parts nur insofern zu tun, dass sie auch hiervon abgeleitet sind, aber das gilt, wie gesagt, für alle Klassen in Xbase++. Die Mutterklasse vererbt übrigens auch "GetNoIVar", über die wir hier im Thread das Problem von Jan exakt genauso gelöst haben wie Pablo das in seiner Methode aus Deinem Beispiel macht. GetNoIVar liefert die Instanzvariable (bzw. ihren Inhalt) zurück, wenn diese existiert, ansonsten NIL. Feddisch.
Blödsinn, Kapitel III. Mit Verlaub.
XbParts sind Controls. Ihnen ist gemein, dass sie allesamt von XbpWindow() abgeleitet sind. Das Data Object hat mit Xbase Parts nix zu tun. Abstract() ist die Mutter aller Klassen, die es in Xbase++ gibt, und sie stellt allgemeine Methoden wie ClassDescribe() und ähnliche zur Verfügung - auch dem Data Object. Auch das hat mit Xbase Parts nur insofern zu tun, dass sie auch hiervon abgeleitet sind, aber das gilt, wie gesagt, für alle Klassen in Xbase++. Die Mutterklasse vererbt übrigens auch "GetNoIVar", über die wir hier im Thread das Problem von Jan exakt genauso gelöst haben wie Pablo das in seiner Methode aus Deinem Beispiel macht. GetNoIVar liefert die Instanzvariable (bzw. ihren Inhalt) zurück, wenn diese existiert, ansonsten NIL. Feddisch.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: MemberVar umbenennen
XParts sind Controls UND Objecte. Xbase++ DataObject ist ein Object und unter Windows auch ein Control.
aber das ist alles EGAL denn DataObject funktionieren in diesem Fall NICHT wegen KEYWORDs.
Blödsinn ist es wenn ihr über meine Lösungs-Vorschlag redet aber nicht selbst einen Versuch unternehmt
ich zumindest habe KEINE Problem mit KEYWORDS wenn ich die JSON Routine von Pablo nutze !
... vielleicht hab ihr nicht die "richtige" Version oder verwendet die falsch (Xbase++ OOP Syntax).
aber das ist alles EGAL denn DataObject funktionieren in diesem Fall NICHT wegen KEYWORDs.
Blödsinn ist es wenn ihr über meine Lösungs-Vorschlag redet aber nicht selbst einen Versuch unternehmt
ich zumindest habe KEINE Problem mit KEYWORDS wenn ich die JSON Routine von Pablo nutze !
... vielleicht hab ihr nicht die "richtige" Version oder verwendet die falsch (Xbase++ OOP Syntax).
gruss by OHR
Jimmy
Jimmy
-
- Rookie
- Beiträge: 10
- Registriert: Di, 19. Jul 2011 9:31
- Wohnort: Ebensfeld
- Hat sich bedankt: 45 Mal
- Danksagung erhalten: 4 Mal
Re: MemberVar umbenennen
Hallo zusammen,
ich hatte ein ähnliches Problem mit einer Membervar "FUNCTION"
Ich konnte das durch den Macro-Operator lösen.
Local cFunction := "FUNCTION"
Objekt:&cFunction:
Bei Next habe ich das aber noch nicht probiert.
ich hatte ein ähnliches Problem mit einer Membervar "FUNCTION"
Ich konnte das durch den Macro-Operator lösen.
Local cFunction := "FUNCTION"
Objekt:&cFunction:
Bei Next habe ich das aber noch nicht probiert.
Gruß
Joern
Joern
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: MemberVar umbenennen
Hallo, Joern.
Ja, das geht, verblüffenderweise sogar, wenn das DataObject LOCAL ist, aber NICHT, wenn die Variable, die den Variablennamen enthält, LOCAL ist. Dann bekommst Du schon beim Kompilieren Fehler XBT0242 "Macro of LOCAL, STATIC or FIELD variable". Das hier geht auch:
Ja, das geht, verblüffenderweise sogar, wenn das DataObject LOCAL ist, aber NICHT, wenn die Variable, die den Variablennamen enthält, LOCAL ist. Dann bekommst Du schon beim Kompilieren Fehler XBT0242 "Macro of LOCAL, STATIC or FIELD variable". Das hier geht auch:
Code: Alles auswählen
? oData:&("Next")
Herzlich,
Tom
Tom
-
- Rookie
- Beiträge: 10
- Registriert: Di, 19. Jul 2011 9:31
- Wohnort: Ebensfeld
- Hat sich bedankt: 45 Mal
- Danksagung erhalten: 4 Mal
Re: MemberVar umbenennen
Hallo Tom,
Seltsam.
Mein Datenobjekt ist Public.
Meine Variable Local.
Objekt:&cFunction :="was auch immer"
cFunction ist eine Local Variable mit dem Wert "Function"
Lässt sich bei mir Kompilieren.
Oder ich steh auf dem schlauch und kann dir nicht folgen.
Seltsam.
Mein Datenobjekt ist Public.
Meine Variable Local.
Objekt:&cFunction :="was auch immer"
cFunction ist eine Local Variable mit dem Wert "Function"
Lässt sich bei mir Kompilieren.
Oder ich steh auf dem schlauch und kann dir nicht folgen.
Gruß
Joern
Joern