Bezeichner in Verse beschreiben Verhalten in Verbindung mit Semantik und können Bezeichner zu Kennungen und bestimmten Schlüsselwörtern hinzufügen. In der Syntax der Bezeichner werden Winkelklammern (< und >) mit dem Schlüsselwort dazwischen verwendet. Zum Beispiel sind in IsPuzzleSolved()<decides><transacts>:void sind „decides“ und „transacts“ Bezeichner.
Attribute in Verse beschreiben ein Verhalten, das außerhalb der Verse-Sprache verwendet wird (im Gegensatz zu Bezeichnern, die die Semantik von Verse beschreiben). Die Attribut-Syntax verwendet das At-Zeichen (@), gefolgt von dem Schlüsselwort, zum Beispiel @editable.
In den folgenden Abschnitten werden alle in Verse verfügbaren Bezeichner und Attribute beschrieben, und es wird erläutert, wann du sie verwenden kannst.
Effekt-Bezeichner
Effekte in Verse zeigen Kategorien von Verhalten an, die eine Funktion zeigen kann. Du kannst Effektbezeichner hinzufügen zu:
Nach dem
()in einer Funktionsdefinition:name()<specifier>:type = codeblock.Das Schlüsselwort
class:name := class<specifier>(){}.
| Bezeichner | Beschreibung | Beispiel |
|---|---|---|
no_rollback | Dies ist der Standardeffekt, wenn kein exklusiver Effekt angegeben ist. Der Effekt |
|
abschließen | Der |
|
zuweist | Dieser Effekt zeigt an, dass die Funktion ein Objekt im Speicher instanziieren kann. Wenn die Methode in einem Fehlerkontext aufgerufen wird, der fehlschlägt, werden die Effekte rückgängig gemacht. |
|
liest | Eine Methode mit diesem Effekt kann aus veränderlichem Zustand lesen. |
|
schreibt | Eine Methode mit diesem Effekt kann in veränderlichen Zustand schreiben. Wenn die Methode in einem Fehlerkontext aufgerufen wird, der fehlschlägt, werden die Effekte rückgängig gemacht. |
|
berechnet | Eine |
|
konvergiert | Dieser Effekt garantiert nicht nur, dass die Ausführung der zugehörigen Funktion keine Nebenwirkung hat, sondern auch, dass die Funktion abgeschlossen wird (nicht unendlich rekursiv). Dieser Effekt kann nur in Funktionen auftreten, die den nativen Bezeichner haben, aber dies wird nicht vom Compiler überprüft. Code, der Standardwerte für Klassenfelder oder Werte für globale Variablen bereitstellt, muss diesen Effekt haben. |
|
entscheidet | Dieser Effekt zeigt an, dass die Funktion fehlschlagen kann und dass der Aufruf dieser Funktion ein fehlbarer Ausdruck ist. Da eine Funktion |
|
aussetzen | Dieser Effekt zeigt an, dass die Funktion asynchron ist. Erzeugt einen asynchronen Kontext für den Körper der Funktion. Schließt sich gegenseitig mit dem |
|
Der Aufruf einer Funktion, die einen bestimmten Effekt hat, setzt in jedem Fall voraus, dass auch der Aufrufer diesen Effekt hat.
Zugriffsbezeichner
Zugriffbezeichner definieren, was mit einem Mitglied interagieren kann und wie. Du kannst Zugriffsbezeichner auf Folgendes anwenden:
Die Kennung für ein Mitglied:
name<specifier> : type = valueDas Schlüsselwort
varfür ein Mitglied:var<specifier> name : type = value
Du kannst einen Zugriffsbezeichner sowohl auf der Kennung als auch auf dem var-Schlüsselwort für eine Variable haben, um zu unterscheiden, wer Zugang zum Lesen und Schreiben der Variable hat. Zum Beispiel hat die folgende Variable MyInteger den öffentlichen Bezeichner auf der Kennung, so dass jeder den Wert lesen kann, aber das var-Schlüsselwort hat den geschützten Bezeichner, so dass nur die aktuelle Klasse und der aktuelle Subtyp in die Variable schreiben können.
var<protected> MyInteger<public>:int = 2| Bezeichner | Beschreibung | Verwendung | Beispiel |
|---|---|---|---|
öffentlich | Die Kennung ist universell zugänglich. | Du kannst diesen Bezeichner verwenden bei:
| Verse |
geschützt | Auf die Kennung kann nur von der aktuellen Klasse und ihren Subypen zugegriffen werden. | Du kannst diesen Bezeichner verwenden bei:
| Verse |
privat | Auf die Kennung kann nur im aktuellen, unmittelbar umschließenden Bereich zugegriffen werden (sei es ein Modul, eine Klasse, eine Struktur usw.). | Du kannst diesen Bezeichner verwenden bei:
| Verse |
intern | Auf die Kennung kann nur im aktuellen, unmittelbar umschließenden Modul zugegriffen werden. Dies ist die Standard-Zugriffsebene. | Du kannst diesen Bezeichner verwenden bei:
| Verse |
umfasst | Auf die Kennung kann nur im aktuellen Bereich und in allen einschließenden Bereichen zugegriffen werden. Alle Assets, die du für Verse freigibst und die in der Datei Assets.digest.Verse erscheinen, haben den Bezeichner | Du kannst diesen Bezeichner verwenden bei:
| Verse |
Klassenbezeichner
Klassenbezeichner definieren bestimmte Eigenschaften von Klassen oder deren Mitgliedern, z. B. ob du eine Subklasse einer Klasse erstellen kannst.
| Bezeichner | Beschreibung | Beispiel |
|---|---|---|
abstrakt | Wenn eine Klasse oder eine Klassenmethode den | Verse |
castable | Gibt an, dass dieser Typ dynamisch belegbar ist. Der Bezeichner Der Typ | Verse |
concrete | Wenn eine Klasse den Bezeichner | Verse |
einzigartig | Einer einzigartigen Klasse in Verse wird für jede Instanz eine einzigartige Identität zugewiesen. Das heißt, selbst wenn zwei Instanzen derselben eindeutigen Klasse dieselben Feldwerte haben, sind sie nicht gleich, da es sich um unterschiedliche Instanzen handelt. So können Instanzen von einzigartigen Klassen auf Gleichheit verglichen werden, indem ihre Identitäten verglichen werden. Klassen ohne den `unique`-Bezeichner haben keine solche Identität und können daher nur auf der Grundlage der Werte ihrer Felder auf Gleichheit verglichen werden. Das bedeutet, dass einzigartige Klassen mit den Operatoren „=“ und „<>“ verglichen werden können und Subtypen des Typs „comparable“ sind. | Verse |
final | Du kannst den Bezeichner
| Verse |
final_super | Der Bezeichner Das ist in Scene Graph für unmittelbare Subtypen von | Verse |
Persistenz-Bezeichner
Wenn ein benutzerdefinierter Typ, z. B. eine Klasse, den Bezeichner <persistable> hat, bedeutet dies, dass du ihn in deinen modulbezogenen weak_map-Variablen verwenden kannst und dass seine Werte über mehrere Spielsitzungen hinweg bestehen bleiben. Weitere Details zur Persistenz in Verse findest du unter Verwenden dauerhafter Daten in Verse.
Du kannst den dauerhaften Bezeichner mit folgenden Typen verwenden. Folge den Links für weitere Details.
Bezeichner für „Open“ und „Closed“.
Derzeit nur mit Aufzählungen anwendbar. Die Bezeichner <open> und <closed> bestimmen, wie du die Definition der Enum ändern kannst, sobald deine Insel veröffentlicht wurde.
Du kannst die Bezeichner „open“ und „closed“ mit folgenden Typen verwenden. Folge den Links für weitere Details.
| Bezeichner | Beschreibung | Beispiel |
|---|---|---|
Offen | Ein Bezeichner, der derzeit nur für Enums gilt. Du kannst Enum-Werte in einer offenen Enum hinzufügen oder neu anordnen oder sie in eine <closed> Enum ändern. Offene Enums werden am besten eingesetzt, wenn du davon ausgehst, dass die Anzahl der Werte in deiner Enum in Zukunft zunehmen wird. Zum Beispiel eine Enum von Waffentypen. | Verse |
Geschlossen | Ein Bezeichner, der derzeit nur für Enums gilt. Enums sind standardmäßig geschlossen. Geschlossene Enums werden am besten für Fälle verwendet, in denen deine Werte erwartungsgemäß gleich bleiben, z. B. für Wochentage. | Verse |
Implementierungsbezeichner
Es ist nicht möglich, Implementierungsbezeichner beim Schreiben von Code zu verwenden, aber du wirst diese sehen, wenn du dir die UEFN-APIs ansiehst.
| Bezeichner | Beschreibung | Beispiel |
|---|---|---|
Nativ | Gibt an, dass die Definitionsdetails des Elements in C++ implementiert sind. Verse-Definitionen mit dem Bezeichner
| Verse |
native_callable | Gibt an, dass eine Instanzmethode sowohl nativ (in C++ implementiert) ist als auch von anderem C++-Code aufgerufen werden kann. Diesen Bezeichner siehst du verwendet für eine Instanzmethode. Dieser Bezeichner wird nicht an Subklassen weitergegeben, so dass du ihn nicht zu einer Definition hinzufügen musst, wenn du eine Methode überschreibst, die diesen Bezeichner hat. | Verse |
Attribute
Attribute in Verse beschreiben ein Verhalten, das außerhalb der Verse-Sprache verwendet wird (im Gegensatz zu Bezeichnern, die die Semantik von Verse beschreiben). Attribute können in der Codezeile vor den Definitionen hinzugefügt werden.
Die Attributsyntax verwendet das At-Zeichen (@), gefolgt von dem Schlüsselwort.
| Attribut | Beschreibung | Beispiel |
|---|---|---|
bearbeitbar | Gibt an, dass es sich bei diesem Feld um eine exponierte Eigenschaft handelt, die direkt von UEFN aus geändert werden kann, so dass du den Verse-Code nicht ändern musst, um seinen Wert zu ändern. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |
editable_text_box | Ein bearbeitbarer String, der im Editor als Textbox angezeigt wird. Bearbeitbare Textboxen unterstützen derzeit keine Tooltips oder Kategorien. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |
editable_slider | Ein bearbeitbarer Schieberegler, der den Float-Typ verwendet. Du kannst den Schieberegler im Editor ziehen, um den Wert zu erhöhen oder zu verringern. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |
editable_number | Eine bearbeitbare Nummer mit Minimum und Maximum. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |
editable_vector_slider | Ein bearbeitbarer Vektor-Schieberegler. Durch Ziehen kannst du die Werte jeder Vektorkomponente ändern. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |
editable_vector_number | Eine bearbeitbare Vektorzahl, die ein vector2, vector2i oder vector3 sein kann. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |
editable_container | Ein bearbeitbarer Container mit Werten. Derzeit werden nur Arrays unterstützt. Für weitere Einzelheiten, siehe Anpassen der Geräteeigenschaften. | Verse |