Язык

MethodHandles.CountedLoop Метод

Определение

Перегрузки

Имя. Описание
CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)

Создает цикл, который подсчитывает диапазон чисел.

CountedLoop(MethodHandle, MethodHandle, MethodHandle)

Создает цикл, который выполняет заданное число итераций.

CountedLoop(MethodHandle, MethodHandle, MethodHandle, MethodHandle)

Создает цикл, который подсчитывает диапазон чисел.

[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

Параметры

start
MethodHandle

не-дескрипторnull для возврата начального значения счетчика цикла, который должен быть int. См. выше сведения о других ограничениях.

end
MethodHandle

не-дескрипторnull для возврата конечного значения счетчика цикла (цикл будет выполняться в end-1). Тип результата должен быть int. См. выше сведения о других ограничениях.

init
MethodHandle

необязательный инициализатор, предоставляющий начальное значение переменной цикла. Может быть null, подразумевая начальное значение по умолчанию. См. выше сведения о других ограничениях.

body
MethodHandle

текст цикла, который может не быть null. Он управляет параметрами цикла и типом результатов в стандартном регистре (см. выше подробные сведения). Он должен принимать собственный тип возвращаемого int значения (если непустый) плюс параметр (для счетчика) и принимать любое количество дополнительных типов. См. выше сведения о других ограничениях.

Возвращаемое значение

дескриптор метода, представляющий цикл.

Атрибуты

Комментарии

Создает цикл, который подсчитывает диапазон чисел. Это удобная оболочка для универсального комбинатора циклов #loop(MethodHandle[][]).

Счетчик i цикла — это переменная итерации цикла типа int. end Дескриптор start определяет начальные (включительно) и конечные (эксклюзивные) значения счетчика цикла. Счетчик цикла будет инициализирован для int значения, возвращаемого из вычисления start дескриптора и запуска к значению, возвращаемому ( end исключительно) с шириной шага 1.

body Если дескриптор возвращаетvoid типV, то также присутствует ведущая переменная итерации цикла этого типа. Эта переменная инициализирована с помощью необязательного init дескриптора или значения #empty по умолчанию по умолчанию типа V , если этот дескриптор имеет значение null.

В каждой итерации переменные итерации передаются вызову дескриптора body . void Значение, возвращаемое телом (типаV), обновляет переменную итерации. Результат выполнения дескриптора цикла будет окончательным V значением этой переменной (или void если V нет переменной).

Следующие правила хранятся для дескрипторов аргументов:<ul<>li>И endstart дескриптора не должны бытьnull, и должны возвращать общий типint, называемый здесь, как I в списках типов параметров. <li>Дескриптор body не должен быть; его тип должен быть nullформы (V I A...)V, где V неvoid является или иным (I A...)voidобразом. (В void данном случае мы назначим тип имениV, и мы будем писать (V I A...)V с пониманием того, что void тип Vvoid тихо удаляется из списка параметров, оставляя (I A...)V.) <li>Список параметров (V I A...) текста вносит свой вклад в список типов, называемых списком <>внутренних параметров< em/em>. Он будет ограничивать списки параметров других частей цикла. <li>Как особый случай, если текст вносит только V и I типы, без дополнительных A типов, внутренний список параметров расширяется типами A... аргументов дескриптора end . <li>Если типы (V I) переменных итерации удаляются из внутреннего списка параметров, результирующий короткий список (A...) называется списком <>внешних параметров< или em>. <li>Тип возвращаемого текста V, если он неvoid является, определяет тип дополнительной переменной состояния цикла. Текст должен принимать ведущий параметр и возвращать значение этого типа V. <li>, если init он не являетсяnull, он должен иметь тип возвращаемого значения V. Его список параметров (некоторых форм <c>(A*)</c>) должен быть фактически идентичным внешнему списку (A...)параметров. <li>If init , nullпеременная цикла будет инициализирована в его #empty значение по умолчанию. <li>Список start параметров (какой-то формы (A*)) должен быть фактически идентичным внешнему списку (A...)параметров. <li>Аналогичным образом список end параметров должен быть фактически идентичным внешнему списку параметров. </ul>

Результирующий дескриптор цикла результирующий тип и сигнатура параметра определяются следующим образом:< ul><li>Тип результата дескриптора цикла — это тип V результата тела. <li>Типы параметров обработчика цикла — это типы (A...)из списка внешних параметров. </ul>

Ниже приведен псевдокод для результирующего дескриптора цикла. В коде V/v представляет тип / значение второй переменной цикла, а также тип результата цикла, а A.../a... также аргументы, передаваемые в цикл. <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>

Добавлено в 9.

Java документации по java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Применяется к

CountedLoop(MethodHandle, MethodHandle, MethodHandle)

Создает цикл, который выполняет заданное число итераций.

[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

Параметры

iterations
MethodHandle

не-дескрипторnull для возврата числа итераций, которые должен выполняться этот цикл. Тип результата дескриптора должен быть int. См. выше сведения о других ограничениях.

init
MethodHandle

необязательный инициализатор, предоставляющий начальное значение переменной цикла. Может быть null, подразумевая начальное значение по умолчанию. См. выше сведения о других ограничениях.

body
MethodHandle

текст цикла, который может не быть null. Он управляет параметрами цикла и типом результатов в стандартном регистре (см. выше подробные сведения). Он должен принимать собственный тип возвращаемого int значения (если непустый) плюс параметр (для счетчика) и принимать любое количество дополнительных типов. См. выше сведения о других ограничениях.

Возвращаемое значение

дескриптор метода, представляющий цикл.

Атрибуты

Комментарии

Создает цикл, который выполняет заданное число итераций. Это удобная оболочка для универсального комбинатора циклов #loop(MethodHandle[][]).

Число итераций определяется результатом оценки дескриптора iterations . Счетчик i цикла — это дополнительная переменная итерации цикла типа int. Она будет инициализирована до 0 и увеличивается на 1 в каждой итерации.

body Если дескриптор возвращаетvoid типV, то также присутствует ведущая переменная итерации цикла этого типа. Эта переменная инициализирована с помощью необязательного init дескриптора или значения #empty по умолчанию по умолчанию типа V , если этот дескриптор имеет значение null.

В каждой итерации переменные итерации передаются вызову дескриптора body . void Значение, возвращаемое телом (типаV), обновляет переменную итерации. Результат выполнения дескриптора цикла будет окончательным V значением этой переменной (или void если V нет переменной).

Следующие правила хранятся для дескрипторов аргументов:ul>li Дескриптор iterations не должен быть nullи должен возвращать типint, указанный здесь, как I в списках типов параметров.><< <li>Дескриптор body не должен быть; его тип должен быть nullформы (V I A...)V, где V неvoid является или иным (I A...)voidобразом. (В void данном случае мы назначим тип имениV, и мы будем писать (V I A...)V с пониманием того, что void тип Vvoid тихо удаляется из списка параметров, оставляя (I A...)V.) <li>Список параметров (V I A...) текста вносит свой вклад в список типов, называемых списком <>внутренних параметров< em/em>. Он будет ограничивать списки параметров других частей цикла. <li>Как особый случай, если текст вносит только V и I типы, без дополнительных A типов, внутренний список параметров расширяется типами A... аргументов дескриптора iterations . <li>Если типы (V I) переменных итерации удаляются из внутреннего списка параметров, результирующий короткий список (A...) называется списком <>внешних параметров< или em>. <li>Тип возвращаемого текста V, если он неvoid является, определяет тип дополнительной переменной состояния цикла. Текст должен принимать ведущий параметр и возвращать значение этого типа V. <li>, если init он не являетсяnull, он должен иметь тип возвращаемого значения V. Его список параметров (некоторых форм <c>(A*)</c>) должен быть фактически идентичным внешнему списку (A...)параметров. <li>If init , nullпеременная цикла будет инициализирована в его #empty значение по умолчанию. <li>Список iterations параметров (какой-то формы (A*)) должен быть фактически идентичным внешнему списку (A...)параметров. </ul>

Результирующий дескриптор цикла результирующий тип и сигнатура параметра определяются следующим образом:< ul><li>Тип результата дескриптора цикла — это тип V результата тела. <li>Типы параметров обработчика цикла — это типы (A...)из списка внешних параметров. </ul>

Ниже приведен псевдокод для результирующего дескриптора цикла. В коде V/v представляет тип / значение второй переменной цикла, а также тип результата цикла, а A.../a... также аргументы, передаваемые в цикл. <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>

Добавлено в 9.

Java документации по java.lang.invoke.MethodHandles.countedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Применяется к