Sprache

MethodHandles.CountedLoop Methode

Definition

Überlädt

Name Beschreibung
CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)

Erstellt eine Schleife, die über einen Zahlenbereich zählt.

CountedLoop(MethodHandle, MethodHandle, MethodHandle)

Erstellt eine Schleife, die eine bestimmte Anzahl von Iterationen ausführt.

CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)

Erstellt eine Schleife, die über einen Zahlenbereich zählt.

[Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? CountedLoop(Java.Lang.Invoke.MethodHandle? start, Java.Lang.Invoke.MethodHandle? end, Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member CountedLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Parameter

start
MethodHandle

ein Nicht-Handlenull , um den Startwert des Schleifenzählers zurückzugeben, der sein intmuss. Weitere Einschränkungen finden Sie oben.

end
MethodHandle

ein Nicht-Handlenull, um den Endwert des Schleifenzählers zurückzugeben (die Schleife wird ausgeführt).end-1 Der Ergebnistyp muss sein int. Weitere Einschränkungen finden Sie oben.

init
MethodHandle

optionaler Initialisierer, der den Anfangswert der Schleifenvariable bereitstellt. Kann sein null, was einen Standardwert bedeutet. Weitere Einschränkungen finden Sie oben.

body
MethodHandle

Textkörper der Schleife, die möglicherweise nicht sein nullkann. Sie steuert die Schleifenparameter und den Ergebnistyp im Standardfall (details hierzu finden Sie oben). Er muss seinen eigenen Rückgabetyp (wenn nicht ungültig) sowie einen int Parameter (für den Zähler) akzeptieren und eine beliebige Anzahl zusätzlicher Typen akzeptieren. Weitere Einschränkungen finden Sie oben.

Gibt zurück

ein Methodenhandle, das die Schleife darstellt.

Attribute

Hinweise

Erstellt eine Schleife, die über einen Zahlenbereich zählt. Dies ist ein Komfortwrapper für den generischen #loop(MethodHandle[][])-Schleifenkombinator.

Der Schleifenzähler i ist eine Loop iterationsvariable vom Typ int. Die start Und end Handles bestimmen die Anfangs- (einschließlich) und Endwerte (exklusiv) des Schleifenzählers. Der Schleifenzähler wird auf den wert initialisiert, der int aus der Auswertung des start Handles zurückgegeben wird, und wird mit einer Schrittbreite von 1 auf den von end (ausschließlich) zurückgegebenen Wert ausgeführt.

Wenn der body Handle einen NichttypvoidVzurückgibt, ist auch eine führende Iterationsvariable dieses Typs vorhanden. Diese Variable wird mit dem optionalen init Handle oder dem #empty Standardwert des Typs V initialisiert, wenn dieses Handle lautet null.

In jeder Iteration werden die Iterationsvariablen an einen Aufruf des body Handles übergeben. Ein nicht vom Textkörper (vom TypV) zurückgegebener Wertvoid aktualisiert die führende Iterationsvariable. Das Ergebnis der Ausführung des Schleifenziehpunkts ist der endgültige V Wert dieser Variablen (oder void wenn keine V Variable vorhanden ist).

Die folgenden Regeln enthalten für das Argument handles:<ul><li>The start and end handles must not be null, and handles must both return the common type int, referred to here as I in parameter type lists. <li>Der body Ziehpunkt darf nicht sein null; sein Typ muss der Form (V I A...)Vsein, wo V nicht,void oder sonst (I A...)void. (In dem void Fall weisen wir den Typ void dem Namen Vzu, und wir schreiben (V I A...)V mit dem Verständnis, dass ein void Typ V ruhig aus der Parameterliste gelöscht wird, und verlassen (I A...)V.) <li>Die Parameterliste (V I A...) des Textkörpers trägt zu einer Liste der Typen bei, die <als interne>Parameterliste</em> bezeichnet werden. Sie schränkt die Parameterlisten der anderen Schleifenteile ein. <li>Als Sonderfall, wenn der Textkörper nur V beiträgt und I Typen ohne zusätzliche A Typen, wird die interne Parameterliste durch die Argumenttypen A... des end Handles erweitert. <li>Wenn die Iterationsvariablentypen (V I) aus der internen Parameterliste verworfen werden, wird die resultierende kürzere Liste (A...) als <em>externe Parameterliste</em> bezeichnet. <li>Der Rückgabetyp Vdes Textkörpers bestimmt, falls nicht, den Typ einer zusätzlichen Zustandsvariablenvoid der Schleife. Der Textkörper muss sowohl einen führenden Parameter akzeptieren als auch einen Wert dieses Typs Vzurückgeben. <li>Ist init dies nicht dernull Wert, muss sie den Rückgabetyp Vaufweisen. Die Parameterliste (in form <c>(A*)</c>) muss effektiv mit der externen Parameterliste (A...)identisch sein. <li>If init is null, the loop variable will be initialized to its #empty default value. <li>Die Parameterliste von start (in irgendeiner Form (A*)) muss effektiv mit der externen Parameterliste (A...)identisch sein. <li>Ebenso muss die Parameterliste end effektiv mit der externen Parameterliste identisch sein. </ul>

Der Ergebnistyp und die Parametersignatur des resultierenden Schleifenziehpunkts werden wie folgt bestimmt:<ul<>Li>Der Ergebnistyp des Schleifenziehpunkts ist der Ergebnistyp V des Textkörpers. <li>Die Parametertypen des Schleifenhandles sind die Typen (A...)aus der externen Parameterliste. </ul>

Hier ist pseudocode für den resultierenden Schleifenziehpunkt. Stellen Sie im Code den Typ/Wert der zweiten Schleifenvariable sowie den Ergebnistyp der Schleife dar unda...A.../stellen Argumente dar, V/v die an die Schleife übergeben werden. <Blockquote>

{@code
            int start(A...);
            int end(A...);
            V init(A...);
            V body(V, int, A...);
            V countedLoop(A... a...) {
              int e = end(a...);
              int s = start(a...);
              V v = init(a...);
              for (int i = s; i < e; ++i) {
                v = body(v, i, a...);
              }
              return v;
            }
            }

</blockquote>

Hinzugefügt in 9.

Java Dokumentation für java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für:

CountedLoop(MethodHandle, MethodHandle, MethodHandle)

Erstellt eine Schleife, die eine bestimmte Anzahl von Iterationen ausführt.

[Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? CountedLoop(Java.Lang.Invoke.MethodHandle? iterations, Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("countedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member CountedLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

Parameter

iterations
MethodHandle

ein Nicht-Handlenull , um die Anzahl der Iterationen zurückzugeben, die diese Schleife ausführen soll. Der Ergebnistyp des Handles muss sein int. Weitere Einschränkungen finden Sie oben.

init
MethodHandle

optionaler Initialisierer, der den Anfangswert der Schleifenvariable bereitstellt. Kann sein null, was einen Standardwert bedeutet. Weitere Einschränkungen finden Sie oben.

body
MethodHandle

Textkörper der Schleife, die möglicherweise nicht sein nullkann. Sie steuert die Schleifenparameter und den Ergebnistyp im Standardfall (details hierzu finden Sie oben). Er muss seinen eigenen Rückgabetyp (wenn nicht ungültig) sowie einen int Parameter (für den Zähler) akzeptieren und eine beliebige Anzahl zusätzlicher Typen akzeptieren. Weitere Einschränkungen finden Sie oben.

Gibt zurück

ein Methodenhandle, das die Schleife darstellt.

Attribute

Hinweise

Erstellt eine Schleife, die eine bestimmte Anzahl von Iterationen ausführt. Dies ist ein Komfortwrapper für den generischen #loop(MethodHandle[][])-Schleifenkombinator.

Die Anzahl der Iterationen wird durch das iterations Handleauswertungsergebnis bestimmt. Der Schleifenzähler i ist eine zusätzliche Iterationsvariable der Schleife vom Typ int. Sie wird in jeder Iteration auf 0 initialisiert und um 1 erhöht.

Wenn der body Handle einen NichttypvoidVzurückgibt, ist auch eine führende Iterationsvariable dieses Typs vorhanden. Diese Variable wird mit dem optionalen init Handle oder dem #empty Standardwert des Typs V initialisiert, wenn dieses Handle lautet null.

In jeder Iteration werden die Iterationsvariablen an einen Aufruf des body Handles übergeben. Ein nicht vom Textkörper (vom TypV) zurückgegebener Wertvoid aktualisiert die führende Iterationsvariable. Das Ergebnis der Ausführung des Schleifenziehpunkts ist der endgültige V Wert dieser Variablen (oder void wenn keine V Variable vorhanden ist).

Die folgenden Regeln halten für das Argument handles:<ul><Li>Das iterations Handle darf nicht sein nullund muss den Typ zurückgeben, der hier als I Parametertyplisten intbezeichnet wird. <li>Der body Ziehpunkt darf nicht sein null; sein Typ muss der Form (V I A...)Vsein, wo V nicht,void oder sonst (I A...)void. (In dem void Fall weisen wir den Typ void dem Namen Vzu, und wir schreiben (V I A...)V mit dem Verständnis, dass ein void Typ V ruhig aus der Parameterliste gelöscht wird, und verlassen (I A...)V.) <li>Die Parameterliste (V I A...) des Textkörpers trägt zu einer Liste der Typen bei, die <als interne>Parameterliste</em> bezeichnet werden. Sie schränkt die Parameterlisten der anderen Schleifenteile ein. <li>Als Sonderfall, wenn der Textkörper nur V beiträgt und I Typen ohne zusätzliche A Typen, wird die interne Parameterliste durch die Argumenttypen A... des iterations Handles erweitert. <li>Wenn die Iterationsvariablentypen (V I) aus der internen Parameterliste verworfen werden, wird die resultierende kürzere Liste (A...) als <em>externe Parameterliste</em> bezeichnet. <li>Der Rückgabetyp Vdes Textkörpers bestimmt, falls nicht, den Typ einer zusätzlichen Zustandsvariablenvoid der Schleife. Der Textkörper muss sowohl einen führenden Parameter akzeptieren als auch einen Wert dieses Typs Vzurückgeben. <li>Ist init dies nicht dernull Wert, muss sie den Rückgabetyp Vaufweisen. Die Parameterliste (in form <c>(A*)</c>) muss effektiv mit der externen Parameterliste (A...)identisch sein. <li>If init is null, the loop variable will be initialized to its #empty default value. <li>Die Parameterliste von iterations (in irgendeiner Form (A*)) muss effektiv mit der externen Parameterliste (A...)identisch sein. </ul>

Der Ergebnistyp und die Parametersignatur des resultierenden Schleifenziehpunkts werden wie folgt bestimmt:<ul<>Li>Der Ergebnistyp des Schleifenziehpunkts ist der Ergebnistyp V des Textkörpers. <li>Die Parametertypen des Schleifenhandles sind die Typen (A...)aus der externen Parameterliste. </ul>

Hier ist pseudocode für den resultierenden Schleifenziehpunkt. Stellen Sie im Code den Typ/Wert der zweiten Schleifenvariable sowie den Ergebnistyp der Schleife dar unda...A.../stellen Argumente dar, V/v die an die Schleife übergeben werden. <Blockquote>

{@code
            int iterations(A...);
            V init(A...);
            V body(V, int, A...);
            V countedLoop(A... a...) {
              int end = iterations(a...);
              V v = init(a...);
              for (int i = 0; i < end; ++i) {
                v = body(v, i, a...);
              }
              return v;
            }
            }

</blockquote>

Hinzugefügt in 9.

Java Dokumentation für java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: