Langage

MethodHandles.WhileLoop(MethodHandle, MethodHandle, MethodHandle) Méthode

Définition

Construit une while boucle à partir d’un initialiseur, d’un corps et d’un prédicat.

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

Paramètres

init
MethodHandle

initialiseur facultatif, fournissant la valeur initiale de la variable de boucle. Peut être null, ce qui implique une valeur initiale par défaut. Consultez ci-dessus pour connaître les autres contraintes.

pred
MethodHandle

condition pour la boucle, qui peut ne pas être null. Son type de résultat doit être boolean. Consultez ci-dessus pour connaître les autres contraintes.

body
MethodHandle

corps de la boucle, qui peut ne pas être null. Il contrôle les paramètres de boucle et le type de résultat. Consultez ci-dessus pour connaître les autres contraintes.

Retours

un handle de méthode implémentant la while boucle comme décrit par les arguments.

Attributs

Remarques

Construit une while boucle à partir d’un initialiseur, d’un corps et d’un prédicat. Il s’agit d’un wrapper pratique pour le combinateur de boucle générique #loop(MethodHandle[][]).

Le pred handle décrit la condition de boucle ; et body, son corps. La boucle résultant de cette méthode évalue d’abord, dans chaque itération, le prédicat, puis exécute son corps (si le prédicat est évalué à true). La boucle se termine une fois le prédicat évalué false (le corps ne sera pas exécuté dans ce cas).

Le init handle décrit la valeur initiale d’une variable locale de boucle facultative supplémentaire. Dans chaque itération, cette variable locale de boucle, s’il est présent, est passée à l’appel body et mise à jour avec la valeur retournée par son appel. Le résultat de l’exécution de boucle est la valeur finale de la variable locale de boucle supplémentaire (le cas échéant).

Les règles suivantes tiennent pour ces handles d’argument :ul>li Le handle ne doit pas être null; son type doit être de la forme (V A...)V, où V n’estvoid pas, ou sinon (A...)void.body><< (Dans le void cas, nous affectons le type void au nomV, et nous allons écrire (V A...)V avec la compréhension qu’un void type V est tranquillement supprimé de la liste des paramètres, en laissant (A...)V.) <li>La liste (V A...) des paramètres du corps est appelée em <>internal parameter list</em>. Elle limite les listes de paramètres des autres parties de boucle. <li>Si le type V de variable d’itération est supprimé de la liste de paramètres internes, la liste (A...) plus courte résultante est appelée liste<<> de paramètres externes em.> <li>Le type Vde retour du corps, s’il n’est pas levoid cas, détermine le type d’une variable d’état supplémentaire de la boucle. Le corps doit accepter et retourner une valeur de ce type V. <li>If init is non-null, it must have return type V. Sa liste de paramètres (de la forme <c(A*)</c>) doit être effectivement identique à la liste de (A...)paramètres> externes. <li>If init is null, la variable de boucle est initialisée à sa valeur par défaut #empty. <li>Le pred handle ne doit pas être null. Il doit avoir boolean comme type de retour. Sa liste de paramètres (vide ou du formulaire (V A*)) doit être effectivement identique à la liste de paramètres interne. </ul>

Le type de résultat et la signature de paramètre du handle de boucle résultant sont déterminés comme suit :< ul<>li>Le type de résultat du handle de boucle est le type V de résultat du corps. <li>Les types de paramètres du handle de boucle sont les types (A...), à partir de la liste de paramètres externes. </ul>

Voici le pseudocode pour le handle de boucle résultant. Dans le code, V/v représente le type/valeur de la seule variable de boucle, ainsi que le type de résultat de la boucle ; et A/a, celui de l’argument passé à la boucle. <blockquote>

{@code
            V init(A...);
            boolean pred(V, A...);
            V body(V, A...);
            V whileLoop(A... a...) {
              V v = init(a...);
              while (pred(v, a...)) {
                v = body(v, a...);
              }
              return v;
            }
            }

</blockquote>

Ajouté dans 9.

Java documentation pour java.lang.invoke.MethodHandles.whileLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

S’applique à