MethodHandles.CountedLoop Método

Definição

Sobrecargas

Nome Description
CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)

Constrói um loop que conta um intervalo de números.

CountedLoop(MethodHandle, MethodHandle, MethodHandle)

Constrói um loop que executa um determinado número de iterações.

CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)

Constrói um loop que conta um intervalo de números.

[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

Parâmetros

start
MethodHandle

um identificador nãonull para retornar o valor inicial do contador de loop, que deve ser int. Veja acima outras restrições.

end
MethodHandle

um identificador nãonull para retornar o valor final do contador de loop (o loop será executado para end-1). O tipo de resultado deve ser int. Veja acima outras restrições.

init
MethodHandle

inicializador opcional, fornecendo o valor inicial da variável de loop. Pode ser null, implicando um valor inicial padrão. Veja acima 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 no caso padrão (veja acima para obter detalhes). Ele deve aceitar seu próprio tipo de retorno (se não for nulo) mais um int parâmetro (para o contador) e pode aceitar qualquer número de tipos adicionais. Veja acima outras restrições.

Retornos

Um identificador de método que representa o loop.

Atributos

Comentários

Constrói um loop que conta um intervalo de números. Este é um wrapper de conveniência para o combinador de loop genérico #loop(MethodHandle[][]).

O contador i de loop é uma variável de iteração de loop do tipo int. Os start identificadores e end determinam os valores inicial (inclusivo) e final (exclusivo) do contador de loop. O contador de loop será inicializado para o int valor retornado da avaliação do start identificador e executado para o valor retornado de end (exclusivamente) com uma largura de etapa de 1.

Se o body identificador retornar um tipo nãovoidV, uma variável de iteração de loop à esquerda desse tipo também estará presente. Essa variável é inicializada usando o identificador opcional init ou para o #empty valor padrão do tipo V se esse identificador for null.

Em cada iteração, as variáveis de iteração são passadas para uma invocação do body identificador. Um valor nãovoid retornado do corpo (do tipo V) atualiza a variável de iteração principal. O resultado da execução do identificador de loop será o valor final V dessa variável (ou void se não houver nenhuma V variável).

As regras a seguir são válidas para os identificadores de argumento:ul<li Os identificadores e > não devem ser <, e devem retornar o tipo >comum , referido aqui como start em listas de tipos de parâmetros.endnullintI <li>A body alça não deve ser null; seu tipo deve ser da forma (V I A...)V, onde V é não-void, ou então (I A...)void. (No void caso, atribuímos o tipo void ao nome Ve escreveremos (V I A...)V com o entendimento de que um void tipo V é silenciosamente descartado da lista de parâmetros, deixando (I A...)V.) <li>A lista (V I A...) de parâmetros do corpo contribui para uma lista de tipos chamada <em>lista de parâmetros< internos/em>. Isso restringirá as listas de parâmetros das outras partes do loop. <li>Como um caso especial, se o corpo contribuir apenas V com I e tipos, sem tipos adicionais A , a lista de parâmetros internos será estendida pelos tipos A... de argumento do end identificador. <li>Se os tipos (V I) de variáveis de iteração forem removidos da lista de parâmetros internos, a lista (A...) mais curta resultante será chamada de <em>lista de parâmetros<> externos <li>O tipo Vde retorno do corpo , se não-void, determina o tipo de uma variável de estado adicional do loop. O corpo deve aceitar um parâmetro principal e retornar um valor desse tipo V. <li>Se init não for , ele deve ter o tipo nulldeV retorno . Sua lista de parâmetros (de alguma forma <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 #empty valor padrão. <li>A lista de parâmetros de start (de alguma forma (A*)) deve ser efetivamente idêntica à lista (A...)de parâmetros externos . <li>Da mesma forma, a lista de parâmetros de deve ser efetivamente idêntica à lista de end parâmetros externos. </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 segunda variável de loop, bem como o tipo de resultado do loop; e represente A.../a... os argumentos passados para o loop. <Citação em bloco>

{@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>

Adicionado em 9.

Documentação Java para java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, 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 Android Open Source Project e usadas de acordo com os termos descritos na Licença de Atribuição Creative Commons 2.5.

Aplica-se a

CountedLoop(MethodHandle, MethodHandle, MethodHandle)

Constrói um loop que executa um determinado número de iterações.

[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

Parâmetros

iterations
MethodHandle

um identificador nãonull para retornar o número de iterações que esse loop deve executar. O tipo de resultado do identificador deve ser int. Veja acima outras restrições.

init
MethodHandle

inicializador opcional, fornecendo o valor inicial da variável de loop. Pode ser null, implicando um valor inicial padrão. Veja acima 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 no caso padrão (veja acima para obter detalhes). Ele deve aceitar seu próprio tipo de retorno (se não for nulo) mais um int parâmetro (para o contador) e pode aceitar qualquer número de tipos adicionais. Veja acima outras restrições.

Retornos

Um identificador de método que representa o loop.

Atributos

Comentários

Constrói um loop que executa um determinado número de iterações. Este é um wrapper de conveniência para o combinador de loop genérico #loop(MethodHandle[][]).

O número de iterações é determinado pelo resultado da avaliação do iterations identificador. O contador i de loop é uma variável de iteração de loop extra do tipo int. Ele será inicializado como 0 e incrementado em 1 em cada iteração.

Se o body identificador retornar um tipo nãovoidV, uma variável de iteração de loop à esquerda desse tipo também estará presente. Essa variável é inicializada usando o identificador opcional init ou para o #empty valor padrão do tipo V se esse identificador for null.

Em cada iteração, as variáveis de iteração são passadas para uma invocação do body identificador. Um valor nãovoid retornado do corpo (do tipo V) atualiza a variável de iteração principal. O resultado da execução do identificador de loop será o valor final V dessa variável (ou void se não houver nenhuma V variável).

As seguintes regras são válidas para os identificadores de argumento:ul<li O identificador não deve ser >, e deve retornar o tipo <, referido aqui como > nas listas de tipos de parâmetros.iterationsnullintI <li>A body alça não deve ser null; seu tipo deve ser da forma (V I A...)V, onde V é não-void, ou então (I A...)void. (No void caso, atribuímos o tipo void ao nome Ve escreveremos (V I A...)V com o entendimento de que um void tipo V é silenciosamente descartado da lista de parâmetros, deixando (I A...)V.) <li>A lista (V I A...) de parâmetros do corpo contribui para uma lista de tipos chamada <em>lista de parâmetros< internos/em>. Isso restringirá as listas de parâmetros das outras partes do loop. <li>Como um caso especial, se o corpo contribuir apenas V com I e tipos, sem tipos adicionais A , a lista de parâmetros internos será estendida pelos tipos A... de argumento do iterations identificador. <li>Se os tipos (V I) de variáveis de iteração forem removidos da lista de parâmetros internos, a lista (A...) mais curta resultante será chamada de <em>lista de parâmetros<> externos <li>O tipo Vde retorno do corpo , se não-void, determina o tipo de uma variável de estado adicional do loop. O corpo deve aceitar um parâmetro principal e retornar um valor desse tipo V. <li>Se init não for , ele deve ter o tipo nulldeV retorno . Sua lista de parâmetros (de alguma forma <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 #empty valor padrão. <li>A lista de parâmetros de iterations (de alguma forma (A*)) deve ser efetivamente idêntica à lista (A...)de parâmetros externos . </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 segunda variável de loop, bem como o tipo de resultado do loop; e represente A.../a... os argumentos passados para o loop. <Citação em bloco>

{@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>

Adicionado em 9.

Documentação Java para java.lang.invoke.MethodHandles.countedLoop(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 Android Open Source Project e usadas de acordo com os termos descritos na Licença de Atribuição Creative Commons 2.5.

Aplica-se a