MethodHandles.CountedLoop Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Surcharges
| Nom | Description |
|---|---|
| CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle) |
Construit une boucle qui compte sur une plage de nombres. |
| CountedLoop(MethodHandle, MethodHandle, MethodHandle) |
Construit une boucle qui exécute un nombre donné d’itérations. |
CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)
Construit une boucle qui compte sur une plage de nombres.
[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
Paramètres
- start
- MethodHandle
un handle non-handlenull pour retourner la valeur de début du compteur de boucle, qui doit être int.
Consultez ci-dessus pour connaître les autres contraintes.
- end
- MethodHandle
un handle non-handlenull pour retourner la valeur de fin du compteur de boucles (la boucle s’exécute sur end-1). Le type de résultat doit être int. Consultez ci-dessus pour connaître les autres contraintes.
- 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.
- 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 dans le cas standard (voir ci-dessus pour plus d’informations).
Il doit accepter son propre type de retour (si non void) plus un int paramètre (pour le compteur) et peut accepter un nombre quelconque de types supplémentaires.
Consultez ci-dessus pour connaître les autres contraintes.
Retours
un handle de méthode représentant la boucle.
- Attributs
Remarques
Construit une boucle qui compte sur une plage de nombres. Il s’agit d’un wrapper pratique pour le combinateur de boucle générique #loop(MethodHandle[][]).
Le compteur i de boucle est une variable d’itération de boucle de type int. Les start handles déterminent end les valeurs de début (inclusive) et de fin (exclusive) du compteur de boucle. Le compteur de boucles est initialisé sur la int valeur retournée par l’évaluation du start handle et s’exécute sur la valeur retournée ( end exclusivement) par une largeur d’étape de 1.
Si le body handle retourne un non-typeVvoid, une variable d’itération de boucle de début de ce type est également présente. Cette variable est initialisée à l’aide du handle facultatif init ou à l'#empty valeur par défaut de type V si ce handle est null.
Dans chaque itération, les variables d’itération sont passées à un appel du body handle. Une valeur nonvoid renvoyée par le corps (de type V) met à jour la variable d’itération principale. Le résultat de l’exécution du handle de boucle est la valeur finale V de cette variable (ou void s’il n’y a pas V de variable).
Les règles suivantes sont conservées pour les handles d’argument :ul>li Les handles end ne doivent pas être null, et doivent retourner le type intcommun , appelé ici dans I les listes de types de paramètres.start><<
<li>Le body handle ne doit pas être null; son type doit être de la forme (V I A...)V, où V n’est pasvoid, ou autre (I A...)void. (Dans le void cas, nous affectons le type void au nomV, et nous allons écrire (V I A...)V avec la compréhension qu’un void type V est tranquillement supprimé de la liste des paramètres, en laissant (I A...)V.) <li>La liste (V I A...) des paramètres du corps contribue à une liste de types appelés em <>internal parameter list</em>. Elle limite les listes de paramètres des autres parties de boucle.
<li>As a special case, if the body contribution only V and I types, with no additional A types, then the internal parameter list is extended by the argument types A... of the end handle.
<li>Si les types (V I) de variables d’itération sont supprimés 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 un paramètre de début 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>La liste des paramètres de start (d’une certaine forme (A*)) doit être effectivement identique à la liste des (A...)paramètres externes.
<li>De même, la liste des paramètres de end doit être effectivement identique à la liste des paramètres externes.
</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 deuxième variable de boucle, ainsi que le type de résultat de la boucle ; et A.../a... représente les arguments passés à la boucle.
<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>
Ajouté dans 9.
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 à
CountedLoop(MethodHandle, MethodHandle, MethodHandle)
Construit une boucle qui exécute un nombre donné d’itérations.
[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
Paramètres
- iterations
- MethodHandle
un non-handlenull pour retourner le nombre d’itérations que cette boucle doit exécuter. Le type de résultat du handle doit être int. Consultez ci-dessus pour connaître les autres contraintes.
- 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.
- 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 dans le cas standard (voir ci-dessus pour plus d’informations).
Il doit accepter son propre type de retour (si non void) plus un int paramètre (pour le compteur) et peut accepter un nombre quelconque de types supplémentaires.
Consultez ci-dessus pour connaître les autres contraintes.
Retours
un handle de méthode représentant la boucle.
- Attributs
Remarques
Construit une boucle qui exécute un nombre donné d’itérations. Il s’agit d’un wrapper pratique pour le combinateur de boucle générique #loop(MethodHandle[][]).
Le nombre d’itérations est déterminé par le résultat de l’évaluation iterations du handle. Le compteur i de boucles est une variable d’itération de boucle supplémentaire de type int. Elle sera initialisée à 0 et incrémentée de 1 dans chaque itération.
Si le body handle retourne un non-typeVvoid, une variable d’itération de boucle de début de ce type est également présente. Cette variable est initialisée à l’aide du handle facultatif init ou à l'#empty valeur par défaut de type V si ce handle est null.
Dans chaque itération, les variables d’itération sont passées à un appel du body handle. Une valeur nonvoid renvoyée par le corps (de type V) met à jour la variable d’itération principale. Le résultat de l’exécution du handle de boucle est la valeur finale V de cette variable (ou void s’il n’y a pas V de variable).
Les règles suivantes tiennent pour les handles d’argument :ul>li Le handle ne doit pas être null, et doit retourner le type int, appelé ici comme I dans les listes de types de paramètres.iterations><<
<li>Le body handle ne doit pas être null; son type doit être de la forme (V I A...)V, où V n’est pasvoid, ou autre (I A...)void. (Dans le void cas, nous affectons le type void au nomV, et nous allons écrire (V I A...)V avec la compréhension qu’un void type V est tranquillement supprimé de la liste des paramètres, en laissant (I A...)V.) <li>La liste (V I A...) des paramètres du corps contribue à une liste de types appelés em <>internal parameter list</em>. Elle limite les listes de paramètres des autres parties de boucle.
<li>As a special case, if the body contribution only V and I types, with no additional A types, then the internal parameter list is extended by the argument types A... of the iterations handle.
<li>Si les types (V I) de variables d’itération sont supprimés 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 un paramètre de début 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>La liste des paramètres de iterations (d’une certaine forme (A*)) doit être effectivement identique à la liste des (A...)paramètres externes.
</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 deuxième variable de boucle, ainsi que le type de résultat de la boucle ; et A.../a... représente les arguments passés à la boucle.
<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>
Ajouté dans 9.
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.