Enum Helper

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Enum Helper

Beitragvon compmgmt » 18. Nov 2018, 11:37 Enum Helper

Hallo allerseits, ich habe einen Enum der angibt ob ein Produkt Fleischhaltig, Vegetarisch oder Vegan ist. Dafür möchte ich einen Helper erstellen, mit dem ich ich abfragen kann ob ein Produkt bspw Vegetarisch ist.
Code: Alles auswählen
type
  TDiet = (BEEF, VEGETARIAN, VEGAN);
 
  TDietHelper = record helper for TDiet
    function IsVegan: Boolean;
    function IsVegetarian: Boolean;
  end;

Problem: Es kommt eine Fehlermeldung beim Kompilieren:
Code: Alles auswählen
Fatal: Syntax error, ":" expected but "FOR" found
Gemeint ist damit die Zeile "TDietHelper = record helper for TDiet".

In meinen Augen macht das ganze keinen Sinn, da die Syntax ja korrekt ist. Ich hab extra nochmal in der Wiki reingeschaut (http://wiki.freepascal.org/Helper_types).
Der Prozesseinstiegspunkt "SignaturLaden" in Signatur.dll konnte nicht gefunden werden.
compmgmt
 
Beiträge: 314
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon wp_xyz » 18. Nov 2018, 11:57 Re: Enum Helper

Der Basistyp ist eine Aufzählung, kein Record. Daher: TDietHelper = type helper for TDiet. Und damit das funktioniert muss im Kopf der Unit noch stehen: {$MODESWITCH TYPEHELPERS}

Das funktioniert bei mir:
Code: Alles auswählen
program Project1;
 
{$MODESWITCH TYPEHELPERS}
 
type
  TDiet = (BEEF, VEGETARIAN, VEGAN);
 
  TDietHelper = type helper for TDiet
    function IsVegan: Boolean;
    function IsVegetarian: Boolean;
  end;
 
function TDietHelper.IsVegan: Boolean;
begin
  Result := Self = VEGAN;
end;
 
function TDietHelper.IsVegetarian: Boolean;
begin
  Result := Self = VEGETARIAN;
end;
 
var
  d: TDiet;
begin
  d := VEGAN;
  if d.IsVegan then Writeln('Vegan') else WriteLn('nicht vegan');
  if VEGAN.IsVegan then WriteLn('Vegan') else WriteLn('nicht vegan');
  if BEEF.IsVegan then WriteLn('Vegan') else WriteLn('nicht vegan');
 
  ReadLn;
end.
wp_xyz
 
Beiträge: 2702
Registriert: 8. Apr 2011, 08:01

Beitragvon compmgmt » 18. Nov 2018, 12:14 Re: Enum Helper

Ah, vielen Dank. Jap, es funktioniert. Ich hatte erst gegoogelt und unter Delphi nimmt man scheinbar ein record helper bei Aufzählungstypen.

Eine Sache noch, die zwar eigentlich egal ist, aber die Funktion IsVegetarian müsste heißen
Code: Alles auswählen
Result := (Self >= VEGETARIAN)
da ein veganes Produkt ja automatisch auch vegetarisch ist. Ist aber egal, mir ging es ja nur um den Enum.
Der Prozesseinstiegspunkt "SignaturLaden" in Signatur.dll konnte nicht gefunden werden.
compmgmt
 
Beiträge: 314
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried