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.
Части этой страницы — это изменения на основе работы, созданной и общей 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.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".