Ich möchte nur die beste Methode kennen, um eine C # -Stil-Enumeration in Ruby zu emulieren.
Genauer gesagt, würde ich gerne in der Lage sein, logische Tests gegen die Menge von Werten durchzuführen, die eine Variable gegeben hat. Beispiel wäre der Zustand eines Fensters: "minimiert, maximiert, geschlossen, offen"
Wenn Sie die Enumerationen auf Werte abbilden möchten (z. B. müssen Sie minimiert auf 0, maximiert auf 100 usw.), verwende ich einen Hash der Symbole zu Werten, wie folgt:
%Vor%Das Einfrieren (wie Nate sagt) hindert Sie daran, Dinge in Zukunft durch Zufall zu zerbrechen. Sie können überprüfen, ob etwas gültig ist, indem Sie dies tun
%Vor%Alternativ, wenn Sie keine Werte benötigen und nur "Mitgliedschaft" überprüfen müssen, dann ist ein Array in Ordnung
%Vor%Benutze es so
%Vor%Wenn Ihre Schlüssel Zeichenfolgen sind (wie zum Beispiel ein "Status" -Feld in einer RoR-Anwendung), können Sie ein Array von Zeichenfolgen verwenden. Ich mache das die ganze Zeit in vielen unserer Rails Apps.
%Vor% Das ist so ziemlich das, wozu rails validates_inclusion_of
validator für folgendes gedacht ist: -)
Ich mag es nicht, include? die ganze Zeit, also habe ich das (es ist nur wegen der .in? (1, 2, 3) Fall kompliziert:
%Vor%Damit können Sie
eingeben %Vor%Es ist nicht ganz dasselbe, aber ich werde oft einen Hash für diese Art von Sache erstellen:
%Vor%Das Einfrieren des Hashes verhindert, dass ich versehentlich den Inhalt ändere.
Wenn Sie außerdem einen Fehler beim Zugriff auf etwas, das nicht existiert, ausgeben möchten, können Sie einen defualt Proc dazu verwenden:
%Vor%Ich glaube nicht, dass Ruby echte enums unterstützt - obwohl es immer noch Lösungen gibt.
Tags und Links ruby enumeration language-construct