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

Definição

Constrói um while loop de um inicializador, um corpo e um predicado.

[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

Parâmetros

init
MethodHandle

inicializador opcional, fornecendo o valor inicial da variável de loop. Pode ser null, implicando um valor inicial padrão. Consulte acima para obter outras restrições.

pred
MethodHandle

condição para o loop, que pode não ser null. Seu tipo de resultado deve ser boolean. Consulte acima para obter outras restrições.

body
MethodHandle

corpo do loop, que pode não ser null. Ele controla os parâmetros de loop e o tipo de resultado. Consulte acima para obter outras restrições.

Retornos

um identificador de método implementando o while loop conforme descrito pelos argumentos.

Atributos

Comentários

Constrói um while loop de um inicializador, um corpo e um predicado. Esse é um wrapper de conveniência para o combinador de loop genérico #loop(MethodHandle[][]).

O pred identificador descreve a condição de loop; e bodyseu corpo. O loop resultante desse método, em cada iteração, primeiro avaliará o predicado e, em seguida, executará seu corpo (se o predicado for avaliado como true). O loop será encerrado quando o predicado for avaliado false (o corpo não será executado nesse caso).

O init identificador descreve o valor inicial de uma variável local de loop opcional adicional. Em cada iteração, essa variável local de loop, se presente, será passada para a body e atualizada com o valor retornado de sua invocação. O resultado da execução do loop será o valor final da variável local de loop adicional (se presente).

As regras a seguir contêm esses identificadores de argumento:ul>li O identificador não deve sernull; seu tipo deve ser do formulário(V A...)V, onde V não estávoid ou então(A...)void.body><< (No void caso, atribuimos o tipo void ao nome Ve escreveremos (V A...)V com a compreensão de que um void tipo V é removido silenciosamente da lista de parâmetros, deixando (A...)V.) <li>A lista (V A...) de parâmetros do corpo é chamada de>< em lista< de parâmetros interno/em>. Ele restringirá as listas de parâmetros das outras partes de loop. <li>Se o tipo V de variável de iteração for removido da lista de parâmetros internos, a lista (A...) mais curta resultante será chamada de <>lista</em de parâmetros externos>. <li>O tipo Vde retorno do corpo, se nãovoid for, determina o tipo de uma variável de estado adicional do loop. O corpo deve aceitar e retornar um valor desse tipo V. <li>Se init nãonull for, ele deve ter o tipo Vde retorno. Sua lista de parâmetros (de algum formulário <c>(A*)</c>) deve ser efetivamente idêntica à lista (A...)de parâmetros externos. <li>Se init for null, a variável de loop será inicializada para seu valor padrão #empty. <li>O pred identificador não deve ser null. Ele deve ter boolean como tipo de retorno. Sua lista de parâmetros (vazia ou do formulário (V A*)) deve ser efetivamente idêntica à lista de parâmetros interna. </ul>

O tipo de resultado e a assinatura de parâmetro do identificador de loop resultante são determinados da seguinte maneira:<ul<>li>O tipo de resultado do identificador de loop é o tipo V de resultado do corpo. <li>Os tipos de parâmetro do identificador de loop são os tipos (A...)da lista de parâmetros externos. </ul>

Aqui está o pseudocódigo para o identificador de loop resultante. No código, V/v represente o tipo/valor da variável de loop exclusivo, bem como o tipo de resultado do loop; e A/ao do argumento passado para o loop. <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>

Adicionado em 9.

Java documentação para java.lang.invoke.MethodHandles.whileLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Aplica-se a