Da Sie die Parameter von Funktionen auf bestimmte Datentypen beschränken können, liegt es nahe, dass Sie vielleicht Ihren eigenen Datentyp definieren möchten, aber ich kann in den Rebol-Dokumenten nichts sehen, was dies als Merkmal der Sprache vorschlägt (es sei denn Ich sah nicht gut aus).
Was ich erwarte, ist die Fähigkeit, etwas wie das Folgende zu tun:
%Vor%Ist das möglich? Das Folgende erfüllt mich nicht mit viel Hoffnung:
Vom Link:
Zweck: { Ermöglicht dem Programmierer, benutzerdefinierte REBOL-Datentypen zu definieren }
Es ist ein ziemlich langes Stück Code. Nicht, worauf ich gehofft hatte.
Oft vorgeschlagen, ab heute nicht implementiert nur als experimentelles Patch von Giulio verfügbar .
Alle nützlichen benutzerdefinierten Datentypen Vorschläge kommen normalerweise mit dem Wunsch, sie einzubinden, so dass sie effektiv Dinge wie + oder append überladen können. Es gibt eine interne Abstraktionsebene, die ACTION! genannt wird, die theoretisch einen Platz für diese Hooks bietet:
%Vor%Aktionen sind eine Art "Methodenaufruf" (d. h. polymorph) für das erste Argument, an das die folgenden Parameter übergeben werden. Derzeit gibt es keine Möglichkeit für Benutzer, Aktionen zu erstellen oder einen neuen Datentyp zu erstellen, der auf sie reagiert.
Für Rebol 3 werden benutzerdefinierte Datentypen unter dem Namen "utype" vorgeschlagen - sehen Sie sich " Was ist über UTYPE bekannt? in Rebol? " für mehr.
In der Objektankündigung für Red bemerkte ich jedoch einiges Drucken Sie am Ende:
Um dem Red-Compiler zu helfen, kürzere und schnellere Codes zu erzeugen, wird eine neue #alias-Kompilierungsanweisung eingeführt. Diese Anweisung ermöglicht es Benutzern, eine Objektdefinition in einen "virtuellen" Typ umzuwandeln, der in Typspezifikationsblöcken verwendet werden kann. Zum Beispiel:
%Vor%Dieser Zusatz würde nicht nur feinkörnigere Typenprüfungen für Argumente ermöglichen, sondern dem Benutzer auch helfen, seinen Code besser zu dokumentieren.
Versuchte eine Implementierung von Utypen in Ссылка
Als Beispiel habe ich complex! utype
Grundsätzlich werden Utypen als Objekte mit speziellen Methoden in gepunkteter Form implementiert: so implementiert .add den + op etc.
Im Moment können Sie alle Aktionen überladen (aber make), und einige Eingeborene (mathematische Funktionen, Vergleich, Form, Form, Druck, Probe)
Tags und Links rebol