Syntax des impliziten Schlüsselworts in Scala in Ubuntu 20.04
Um explizite, konkrete Beispiele für die Verfügbarkeit von Typen zu erstellen, ist eine Versorgungsmethode in der Scala Standard Library enthalten. Darüber hinaus ist implizit der Name der Methode. Beachten Sie, dass Scala Version 2.8 stellt implizit ein, was in Prepef als:
Def implizit [t] (implizit e: t) = eBeispiel Nr. 1: Programm von implizit Keyword Scala in Ubuntu 20.04
Hier ist eine kurze Abbildung aus der Präsentation von Retronmen:
Im Scala Reply -Modus haben wir die Variable "x" mit einem impliziten Schlüsselwort bezeichnet und es mit der Zeichenfolge initialisiert. Wir haben einen impliziten Wert der typisierten Zeichenfolge angegeben. Der Typ wird zurückgegeben, wenn die Codezeile ausgeführt wird. Danach suchten wir nach dem impliziten Wert der typisierten Zeichenfolge, indem wir ihn in der impliziten Funktion übergeben und dann der Variablen „Y“ zugewiesen haben. Der Compiler hat den Wert der Zeichenfolge „Demo“ zurückgegeben, während er diesen Wert gespeichert hat. Als nächstes fanden wir den impliziten Wert des "int" -Typs "in der Variablen" Z "ein" Z ". Bei der Kompilierung erzeugt es einen Fehler, der nicht den impliziten Wert für den Int -Parameter in INT finden konnte.
Beispiel Nr. 2: Programm zum Verständnis und Lösen eines Problems impliziter Ansichten in Scala in Ubuntu 20.04
Wenn das Präfix einer Auswahl (zum Beispiel die, die.Präfix.Die Auswahl (Argumentation) hat keine Mitgliederauswahl für Argumente) ist leer, eine implizite Ansicht kann ausgelöst werden (auch nach dem Versuch, die Argumente mit den impliziten Ansichten umzuwandeln). In diesem Fall sucht der Compiler nach impliziten Mitgliedern, die entweder den impliziten Methoden ähneln, oder Funktionen aus einem Typ mit einer Auswahl, die deklariert, lokal im Strom angegeben ist, oder in den umschlossenen, geerbten oder importierten Scopen.
Hier haben wir den Wert „3“ innerhalb des 1 bestanden.min () als „int“ hat keine Definition von min. Der Ergebnis -Int -Typ erzeugt den Wert "1". Dann haben wir das Schlüsselwort implizit mit der INT verwendet, die die min -Definition hat. Es gab den impliziten Typ „int“ zurück als . Danach haben wir die Res2 (1) ausgeführt, die den impliziten Wert in der AnyRef -Definition lokalisiert. Am Ende haben wir das benutzt .GetClass -Methode, die die Skala zurückgab.Laufzeit.Richint -Klasse.
Wenn ein Ausdruck vom erwarteten Typ abweicht, können implizite Ansichten ausgelöst werden, wie unten gezeigt:
Wir haben die Scala zugewiesen.Laufzeit.Richint -Anweisung zum Wert „1“, der bei der Ausführung den impliziten Wert „1“ lieferte
Diese Funktion ist in diesem Fall vom Compiler erforderlich:
Die Skala.Laufzeit.Richint wird dann dem INT -Typ in der impliziten Funktion zugeordnet und gibt die AS -Ausgabe an.
Beispiel 3: Programm des Zugriffs auf einen durch Kontext induzierten implizite Parameter Scala in Ubuntu 20.04
Die implizite Parameter von Scala sind möglicherweise sogar signifikanter als seine impliziten Ansichten. Sie sind Klassenmuster-konforme Typenklassen. Dies wird sporadisch in der Standardbibliothek verwendet. Siehe Scala, wie die Bestellung in SEQ -ähnlicher#sortiert wird. Array Manifests und Canbuildfrom -Objekte werden ebenfalls unter Verwendung impliziter Parameter übergeben.
Kontextgrenzen ist eine Verknüpfungssyntax, die Scala 2.8 Angebote für implizite Argumente. Kurz gesagt, eine Methode, die eine implizite Eingabe vom Typ Y Y [x] erfordert
Der implizite Parameter wird übergeben, aber nicht benannt. Wenn Sie die Methode FOO anwenden, kann dies genau nützlich sein? Es ist üblich, dass der implizite Parameter als implizite Parameter für eine andere Funktion gesendet wird, die aufgerufen wird, anstatt explizit erwähnt werden zu müssen. Um den Wert zu materialisieren, können Sie implizit aufrufen, während Sie die präzise Methode Definition mit dem Kontext festhalten.
Beispiel 4: Programm, um einen Teil der impliziten Parameter Scala in Ubuntu 20 explizite Eingaben zu geben.04
Betrachten Sie das folgende Szenario, wenn Sie einen klassenbasierten Ansatz typisieren und eine Methode aufrufen, die ein Schülerdetail gut druckt:
Wir haben das Scala -Merkmal „Anzeige“ definiert, das die Definition des Displays mit dem Typ „T“ aufweist, und zuweist ihm den Wert „1“ zu. Dann haben wir das Objekt "Anzeige" erstellt, in dem die impliziten Funktionen festgelegt werden. Die erste implizite Funktion wird als „intDisplay“ deklariert, das die Definition „int“ hat. Diese Funktion wird mit dem neuen Schlüsselwort für das Display [int] festgelegt, das die String -Darstellung zurückgibt.
Anschließend haben wir eine weitere implizite Funktion als „StringDisplay“ für die String -Definition festgelegt. Als nächst. Danach haben wir die Fallklasse "Schüler" konstruiert und ihre Attribute "Name" mit dem Datentyp "String" und "Alter" mit dem Typ "int" festgelegt, mit dem Typ "int".
Wir haben das Objekt "Student" implementiert, in das die implizite "StudentDisplay" -Funktion definiert ist. Die Funktion hat zwei Variablen zugewiesen, "DI" für die Anzeige Integer und "DS" für die Anzeige der Zeichenfolge. Diese implizite Funktion hat eine verschachtelte Funktion "Anzeige", die das Objekt "S" für die Klasse "Schüler" erstellt. Die ds.Anzeige nimmt die Eingabe "s".Name ”und der di.Anzeige nimmt das „S.Alter “Parameter. Schließlich legt die Variable "S" die Werte der Attribute "Name" und "Alter" für den Unterricht "Schüler" fest. Mit der implizit Funktion haben wir die "Schüler" -Werte angezeigt.
Die Scala Reples6 zeigte die Ergebnisse der impliziten Werte der Klasse „Schüler“ wie folgt:
Was passiert, wenn wir ändern möchten, wie der Name das Ergebnis ist? Obwohl wir StudentDisplay direkt verwenden und ein anderes Display [String] liefern können, bevorzugen wir den Compiler das Display [int] über die Anzeige [int] vorbei.
Die folgenden Ergebnisse werden erzielt, wenn wir das obige Zeilenstück im vorhergehenden Code verwenden.
Abschluss
In diesem Beitrag haben wir die implizite Funktion diskutiert, die seit Version 2 Teil von Scala ist.8. Zunächst haben wir begonnen, die grundlegende Rolle der Funktion als „Compiler für implizit“ zu demonstrieren,. Diese Methode erwartet implizit ledig. Die extrem grundlegende Technik sollte aus den folgenden Gründen implizit angewendet werden.