MethodHandles.CountedLoop Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.
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.
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.