August 14th, 2020

Wörtliches protokoll Muster

By JEREMY WARNE

Ein Typ, der mit den booleschen Literalen true und false initialisiert werden kann, sollte diesem Protokoll entsprechen. Das CounterDataSource-Protokoll definiert eine optionale Methodenanforderung namens increment(forCount:) und eine optionale Eigenschaftsanforderung namens fixedIncrement. Diese Anforderungen definieren zwei verschiedene Möglichkeiten für Datenquellen, einen angemessenen Inkrementbetrag für eine Counter-Instanz bereitzustellen. Typprüfer sollten eine präzise Typprüfung von Sternelementen im Musterübereinstimmung durchführen, sodass sie entweder einen heterogenen Listentyp[T]oder einen TypedDict-Typ gemäß PEP 589 erhalten. Beispiel: Bei der Entscheidung, welche Namen für den Abgleich verfügbar sein sollen, wird empfohlen, dass Klassenmuster der Spiegel der Konstruktion sein sollten. Das heißt, der Satz der verfügbaren Namen und ihre Typen sollten den Argumenten zu __init__() ähneln. Es gibt keine Syntax, um optionale oder Schlüsselwortargumente anzugeben. solche Funktionstypen werden selten als Rückruftypen verwendet. Callable[…, ReturnType] (Literale Auslassung) kann verwendet werden, um einen Aufrufwert einzugeben, der eine beliebige Anzahl von Argumenten verwendet und ReturnType zurückgibt. Ein einfacher Aufrufist entspricht Callable[…, Any] und wiederum collections.abc.Callable. Es gibt keinen Standard- oder fall- oder anderen Fall – stattdessen kann der spezielle Platzhalter _ als letztes “catch-all”-Muster verwendet werden (siehe Abschnitt auf capture_pattern).

Hier ist ein Beispiel, das zwei Protokolle namens Named and Aged in einer einzigen Protokollzusammensetzungsanforderung für einen Funktionsparameter kombiniert: Reminder: None, False und True sind Schlüsselwörter, die Literale und nicht Namen bezeichnen. Hier ist eine Implementierung einer Klasse, die das RandomNumberGenerator-Protokoll annimmt und anpasst. Diese Klasse implementiert einen Pseudozufallszahlengeneratoralgorithmus, der als linearer kongruentialer Generator bezeichnet wird: Im Folgenden finden Sie eine Momentaufnahme von Java SEI, der aus der WSDL mit der Funktion “wsimport” von JWSDP 2.0 generiert wurde. Die WSDL verwendet Dokument/Literal-umschlossenes Muster. Wie sie sich feststellen lassen, stimmt der Methodenname mit dem Namen des Eingabeelements überein. Die Veranschaulichung dieses Musters erfolgt durch die Diagramme, aus welchem Format von WSDL ich verwenden soll? Hier ist ein Beispiel für eine Version des komplexeren Protokolls vorgeschlagen: Ein Sequenzmuster folgt der gleichen Semantik wie das Entpacken der Zuweisung. Wie beim Entpacken der Zuweisung können sowohl tupelähnliche als auch listenartige Syntax mit identischer Semantik verwendet werden. Jedes Element kann ein beliebiges Muster sein; Es kann auch höchstens ein *Name-Muster geben, um alle verbleibenden Elemente abzufangen: Dieser PEP schlägt vor, Python eine Musterabgleichsanweisung hinzuzufügen, die von einer ähnlichen Syntax inspiriert ist, die in Scala und vielen anderen Sprachen zu finden ist. Obwohl es potenziell nützlich ist, führt es seltsam aussehende neue Syntax ein, ohne die Mustersyntax noch ausdrucksstärker zu machen. Tatsächlich können benannte Konstanten so erstellt werden, dass sie mit den vorhandenen Regeln arbeiten, indem sie in Enum-Typen konvertiert oder in ihren eigenen Namespace eingeschlossen werden (von den Autoren als eine gute Idee betrachtet): PEP 484 gibt an, dass statische Typprüfer die Vollständigkeit von bedingten Prüfungen in Bezug auf Enumerumwerte unterstützen sollten. PEP 586 verallgemeinerte diese Anforderung später auf Literaltypen. Diese Syntax macht viel deutlicher, welche Formate für die Eingabedaten möglich sind und welche Komponenten wo extrahiert werden.

Sie können ein Muster sehen, das dem Auspacken von Listen ähnelt, aber auch die Typprüfung: Das Promise()-Muster ist keine Objektkonstruktion, sondern stellt alles dar, was eine Instanz von Promise ist.

Comments are closed.