AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [RTTI] Reservierte Wörter bei Attributen?
Thema durchsuchen
Ansicht
Themen-Optionen

[RTTI] Reservierte Wörter bei Attributen?

Ein Thema von mquadrat · begonnen am 3. Sep 2011 · letzter Beitrag vom 5. Sep 2011
Antwort Antwort
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#1

[RTTI] Reservierte Wörter bei Attributen?

  Alt 3. Sep 2011, 09:29
Delphi-Version: 5
Guten Morgen zusammen,

Ich grübel gerade über einem kleinen ORM-Mapper, der die Mappings aus Attributen bezieht. Gibt es irgendwo eine Liste reservierter Wörter, die man nicht als Attribute verwenden darf? Hintergrund ist der Versuch ein Attribut "Field" zu definieren. Das endet in der vielsagenden Meldung "':' erwartet aber '(' gefunden". Nenne ich das Attribut "xyField" erfolgt keine Fehlermeldung und alles ist gut.

Die RTTI Hilfe ist da etwas spärlich
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: [RTTI] Reservierte Wörter bei Attributen?

  Alt 3. Sep 2011, 12:06
Wenn du aber FieldAttribute verwendest, dann klappt es (Ich weiß, ist mehr zu schreiben, aber immerhin)
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#3

AW: [RTTI] Reservierte Wörter bei Attributen?

  Alt 3. Sep 2011, 12:32
'ne Liste kenn ich och noch nicht, aber

z.B. das geht alle nicht: var const type field and procedure class of function property ...
und keine Ahnung, warum die überhaupt nicht genutzt werden können

Da sind zwar viele FETTE reservierte Wörter bei, aber wer jetzt denkt alle Reservierte gehen nicht, dann ... z.B. private und read kann man doch verwenden


Was passiert, wenn du einfach den Doppelpunkt schreibst?
[ field: ] läßt sich zumindestens kompilieren
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Sep 2011 um 14:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: [RTTI] Reservierte Wörter bei Attributen?

  Alt 3. Sep 2011, 13:27
Da sind zwar viele FETTE reservierte Wörter bei, aber wer jetzt denkt alle Reservierte gehen nicht, dann ... z.B. private und read kann man doch verwenden
Aber sowas tut doch weh, oder? Naja... man muss echt nicht alles verstehen, was andere verbocken
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#5

AW: [RTTI] Reservierte Wörter bei Attributen?

  Alt 5. Sep 2011, 10:22
Na das verwirrende ist ja, dass ich ohne Probleme eine Klasse "Field" anlegen kann. Der Fehler taucht erst beim Attribut auf. Da werden die [] wohl scheinbar nicht sauber erkannt, oder aber es war mal vorgesehen, dass es in [] mehr als bloß das Attribut geben kann. Oder ich stehe grad noch auf dem Schlauch
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#6

AW: [RTTI] Reservierte Wörter bei Attributen?

  Alt 5. Sep 2011, 11:49
Habe gerade damti gespielt (D2010) und kam zum Schluss, dass man Attribute in Delphi nur super-vorsichtig mit einer ganz langen Zange anfassen darf.

Ich würde sie nicht nutzen, schon gar nicht für etwas so kritisches wie einen ORM, da machsu dir lieber eine eigene DSL (mit ANTLR) oder denkst dir ein XML-Format aus.

Hier meine Versuche, zwischendurch gab's wohl mehr sinnlose Fehler als keine und Error-Insight hatte, wie immer, Null Einsicht.
Wenn du also einen ORM schaffst, der Attribute unterstützt/benötigt, brauchen seine User eine sehr dicke Hornhaut.

Delphi-Quellcode:
program AttributesTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Rtti;

type
  FieldAttribute = class(TCustomAttribute)
  private
    fMappedName: String;
  public
    property MappedName : String read fMappedName write fMappedName;
    constructor Create; overload;
    constructor Create(mappedName : String); overload;
  end;

constructor FieldAttribute.Create(mappedName: String);
begin
  fMappedName := mappedName;
end;

constructor FieldAttribute.Create();
begin
end;

type
  SampleClass = class
  private
    fMiep: String;
    fMööp: String;
  published
    // [FieldAttribute(MappedName='A')] [DCC Fatal Error] AttributesTest.dpr(42): F2084 Internal Error: TI2180
    [FieldAttribute('A')] // Workaround: 2. Ctor mit parameter :-/
    property Miep :String read fMiep write fMiep;
    //[&Field] geht nich! o_O
    //[Field:] kompiliert o_O t, macht aber nix...
    //[@Field] kompiliert o_O t, macht aber nix...
    [FieldAttribute] // WOrkaround: Voller Name mit Attribute-Suffix :-/
    property Mööp :String read fMööp write fMööp;
  end;

 var
  rttiContext : TRttiContext;
  propInfo : TRttiProperty;
  mappedFieldName : String;
  function GetMappedFieldName(propInfo : TRttiProperty) : String;
  var
    attr : TCustomAttribute;
  begin
    for attr in propInfo.GetAttributes() do
      if attr is FieldAttribute then
      begin
        if FieldAttribute(attr).MappedName <> ''  then
          exit (FieldAttribute(attr).MappedName);

        exit (propInfo.Name);
      end;
    exit ('');
  end;

begin
  try
    rttiContext := TRttiContext.Create();
    try
      for propInfo in rttiContext.GetType(SampleClass).GetDeclaredProperties() do
      begin
        mappedFieldName := GetMappedFieldName(propInfo);
        if mappedFieldName <> 'then
          Writeln(propInfo.Name, ' -> ', mappedFieldName);
      end;
    finally
      rttiContext.Free();
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz